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。
答案 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
);