Я хочу установить список выбора как переменную и выполнить для него некоторую условную проверку:
Это мой код, который не работает:
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;
В обоих случаях посещенный столбец будет FALSE для каждой строки.
Мой фактический код отличается. Я использую эту функцию для выполнения какой-то задачи. Не все тут написал. Моя основная проблема заключается в этой задаче. Картина очень неясна, что именно происходит, когда я устанавливаю @variable.
Вам нужно дать более подробную информацию, иначе вопрос кажется очень тривиальным.
@MadhurBhaiya Проверьте сейчас.
Вместо этого вы можете использовать LEFT JOIN
с GROUP BY
. Объединение слева может привести к дублированию строк, соответствующих таблице_2 (поскольку может быть несколько строк для одного и того же значения id
в таблице_1); чтобы справиться с этим, мы будем использовать Group By
. Функция Count()
может использоваться, чтобы определить, существует ли id
в таблице_1 или нет, и, соответственно, определить ИСТИНА/ЛОЖЬ.
Попробуйте следующее:
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
СЛУЧАЙ, КОГДА t1.docId не равен нулю, ТОГДА «ИСТИНА», ИНАЧЕ «ЛОЖЬ» КОНЕЦ КАК посетил..... точно работает для меня.
Этот счетчик объединяет все строки в одну, что неверно.
@lil-wolf он будет сгруппирован по id
, так что вы получите по одной строке на id
. Это то, что ваш предыдущий запрос также должен достичь. Если ваше фактическое требование не отличается.
Но этот счет дает мне одну строку на «всю таблицу». Первый комментарий работает для меня. Левое соединение не будет дублировать идентификаторы. в любом случае я получаю одну строку для каждого идентификатора, присоединяясь к себе.
Почему бы просто не сделать:
select docId from table_1