需要检查状态0或表中是否有记录。
但只会让我失误。
我哪里错了?
我的代码:
SELECT session_id
FROM t_table_1
WHERE session_id NOT IN (select distinct session_id from t_table_2)
OR (select distinct session_id from t_table_2 where status = '0')
我希望结果显示会话不存在且状态等于0
答案 0 :(得分:0)
SELECT session_id
FROM t_table_1
WHERE session_id NOT IN (select distinct session_id from t_table_2)
OR session_id NOT IN (select distinct session_id from t_table_2 where status = '0')
OR
SELECT session_id
FROM t_table_1
WHERE session_id NOT IN ((select distinct session_id from t_table_2) union
(select distinct session_id from t_table_2 where status = '0'))
以上查询都应该有效
答案 1 :(得分:0)
为什么在获得相同结果时使用两个子查询?
使用单个子查询 对于E.g
SELECT session_id
FROM t_table_1
WHERE session_id NOT IN (select distinct session_id from t_table_2)
因为当你的第一个Sub查询返回表的所有行
时你正在使用NOT INselect distinct session_id from t_table_2
答案 2 :(得分:0)
三件事:
not exists
而不是not in
。如果子查询中存在NULL
值,则not in
的行为不直观。select distinct
。where
子句中放置一个简单的子查询。使用exists
。因此:
SELECT t.session_id
FROM t_table_1 t
WHERE NOT EXISTS (select 1 from t_table_2 t2 where t2.session_id = t.session_id) OR
NOT EXISTS (select 1 from t_table_2 where status = '0');
我不确定这是否正是您在文本中指定的逻辑(这有点模糊)。样本数据和预期结果对澄清问题有很大帮助。