#mysql
#mysql
Вопрос:
Я хочу установить список выбора в качестве переменной и выполнить для него некоторую условную проверку:
Это мой код, который не работает:
set @temp = (select docId from table_1);
SELECT
id,
CASE when id IN (@temp) then 'TRUE' else 'FALSE' end as visited
FROM table_2;
Также пробовал это:
set @temp = (select docId from table_1);
SELECT
id,
CASE when (FIND_IN_SET(id,@temp)=1) then 'TRUE' else 'FALSE' end as visited
FROM table_2;
В обоих случаях для каждой строки в столбце visited отображается значение FALSE.
Комментарии:
1. Почему бы просто не сделать:
select docId from table_1
2. Мой фактический код отличается. Я использую эту функцию для выполнения некоторой задачи. Здесь не все написано. Моя главная проблема возникает в этой задаче. На картинке очень неясно, что именно происходит, когда я устанавливаю @variable.
3. Вам нужно предоставить более подробную информацию, иначе вопрос кажется очень тривиальным atm.
4. @MadhurBhaiya Проверьте сейчас.
Ответ №1:
Вместо этого вы можете использовать LEFT JOIN
with GROUP BY
. Объединение по левому краю может привести к дублированию строк, соответствующих table_2 (поскольку в table_1 может быть несколько строк для одного и того же id
значения); чтобы справиться с этим, мы будем использовать Group By
. Count()
функция может быть использована для определения того, id
существует в таблице_1 или нет, и, соответственно, определения TRUE/FALSE.
Попробуйте следующее:
SELECT
t2.id,
CASE WHEN t1.docId IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS visited
FROM table_2 t2
LEFT JOIN table_1 t1 ON t1.docId = t2.id
Комментарии:
1. СЛУЧАЙ, КОГДА t1.docId не равен нулю, ТОГДА ‘TRUE’, ИНАЧЕ ‘FALSE’ ЗАКАНЧИВАЕТСЯ КАК посещенный ….. точно работает для меня.
2. Это количество объединяет все строки в одну, что неверно.
3. @lil-wolf он будет группироваться по
id
, так что вы получите по одной строке наid
. Это то, чего также должен достичь ваш предыдущий запрос. Если только ваши фактические требования не отличаются.4. Но это количество дает мне одну строку на «всю таблицу». Первый комментарий работает для меня. Левое соединение не будет дублировать идентификаторы. в любом случае я получаю одну строку для каждого идентификатора путем присоединения к себе слева.