mysql - 如何在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。
解决方案
你可以用LEFT JOIN
withGROUP BY
代替。左连接可能会导致与 table_2 对应的重复行(因为 table_1 中的相同值可以有多行id
);为了解决这个问题,我们将使用Group By
. Count()
函数可以用来判断id
table_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
推荐阅读
- hibernate - 多对多关系删除操作面临的问题
- python - Bin 时间列并在每个 bin 中对多个列进行分组
- python - 按日期添加两个大小不同的数据框
- css - 如何在完整的 wordPress 页面上添加垂直线?
- oracle - Oracle 18 c trigger error sql ; 执行触发器时出错
- php - 在 Opencart 3.0 中检查结帐条件?
- python - 如何使用具有多个参数和多个返回字段的单个函数调用的输出将新列添加到新数据框中?
- c - 为什么这个 c 程序没有返回我所期望的?
- node.js - 部署到 Heroku 时 Webpack 别名不起作用
- css - Web devtools:继承的样式以删除线显示