首页 > 解决方案 > 如何在mysql中使用set@变量?

问题描述

我想将选择列表设置为变量并对其进行一些条件检查:
这是我的代码不起作用:

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。

标签: mysql

解决方案


你可以用LEFT JOINwithGROUP BY代替。左连接可能会导致与 table_2 对应的重复行(因为 table_1 中的相同值可以有多行id);为了解决这个问题,我们将使用Group By. Count()函数可以用来判断idtable_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 

推荐阅读