2检查表Mysql

时间:2015-07-16 11:14:52

标签: mysql select

需要检查状态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

3 个答案:

答案 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 IN
select 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');

我不确定这是否正是您在文本中指定的逻辑(这有点模糊)。样本数据和预期结果对澄清问题有很大帮助。