在WHERE子句中指定count

时间:2017-03-22 04:12:56

标签: sql count where

select *
from table1 t1,
    table2 t2,
    table3 t3
where t2.parent_id = t1.row_id
    and t2.xyz is not null
    and (
        select count(*)
        from table3
        where xyz = t2.row_id
        ) = 0;

会起作用吗? 我在子查询中使用别名t2。

我的要求是检查是否在where子句中指定条件,使得table3中没有记录,其中table3的列xyz存储为table2的row_id。

1 个答案:

答案 0 :(得分:2)

您可以使用NOT EXISTS断言子查询中没有返回任何行。使用现代显式连接语法而不是基于逗号的旧语法。无需在外面加入table3(您正在有效地进行交叉连接)。

select *
from table1 t1
join table2 t2 on t2.parent_id = t1.row_id
where t2.xyz is not null
    and not exists (
        select 1
        from table3
        where xyz = t2.row_id
        );