MySQL: разделенная строка SQL для использования в предложении WHERE

0

Я ищу способ использовать ключевое слово IN в JasperReport. Мой запрос выглядит так:

SELECT * FROM table_name WHERE CID IN (145,45, 452);

следующий за сообщением jasper, я могу настроить это;

SELECT * FROM table_name WHERE CID IN ($P{MY_CIDS});

и из моей Java я отправил бы $P{MY_CIDS} как String, поэтому мой запрос будет выглядеть как

SELECT * FROM table_name WHERE CID IN ("145,45, 452");

Мои вопросы: как преобразовать в SQL "145,45, 452" в действительный запрос, чтобы он учитывал каждое значение отдельно 145, 45, 452

Вся помощь приветствуется.

Теги:
jasper-reports

3 ответа

2
Лучший ответ
WHERE FIND_IN_SET(CID, "145,45,452")

Но этот запрос всегда будет вызывать fullscan таблицы. Поэтому я предлагаю вам переписать свой код и использовать правильный синтаксис IN (A, B, C).

  • 0
    хорошее решение, это работает таким образом. В настоящее время я не возражаю против полного сканирования, поскольку этот отчет создается только два раза в год.
1

У вас есть два варианта. Чем чаще, перепишите свой запрос следующим образом:

SELECT * FROM table_name WHERE CID IN (?, ?, ?, ..., ?);

Я не уверен, что другой действителен для MySQL, но он отлично работает в PostgreSQL. Он должен использовать неизменяемую функцию, которая анализирует строку в наборе целых чисел и вместо этого использует:

SELECT * FROM table_name WHERE CID IN (split_to_int(?));
  • 0
    спасибо @Denis, к сожалению, в MySQL нет split_to_int.
  • 0
    @Adnan: я бы сказал, к счастью, такой функции нет ;-) В противном случае никто не будет заботиться о нормализованных схемах БД ;-)
Показать ещё 1 комментарий
0
SELECT * FROM table_name WHERE CID IN ($P!{MY_CIDS});

Просто используйте

$P!{MY_CIDS}

( восклицательный знак между $P и {MY_CIDS}).

Теперь Jasper объединяет строки следующим образом:

"SELECT * FROM table_name WHERE CID IN ("
+"145,45,452"
+")";

в результате:

SELECT * FROM table_name WHERE CID IN (145,45,452);

Мне долго понадобилось это, но теперь это работает для меня ".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню