我想将选择列表设置为变量并对其进行一些条件检查:
这是我的无效代码:
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。
答案 0 :(得分:1)
您可以将LEFT JOIN
与GROUP BY
一起使用。左连接可能会导致对应于table_2的行重复(因为table_1中的相同id
值可能有多行);为了解决这个问题,我们将使用Group By
。 Count()
函数可用于确定table_1中是否存在id
,并因此确定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