是否可以实现类似这样的事情?SQL:使用with-clause in“not in”-operator
WITH subQ(attr1) as (SELECT attr1 FROM tab1)
SELECT tab2.attr2, FROM tab2
where tab2.attr2 not in subQ
我不想在“不在”之后编写子选择符。
是否可以实现类似这样的事情?SQL:使用with-clause in“not in”-operator
WITH subQ(attr1) as (SELECT attr1 FROM tab1)
SELECT tab2.attr2, FROM tab2
where tab2.attr2 not in subQ
我不想在“不在”之后编写子选择符。
正确的SQL使用子查询:
WITH subQ(attr1) as (
SELECT attr1
FROM tab1
)
SELECT tab2.attr2
FROM tab2
where tab2.attr2 not in (select attr1 from subQ);
的CTE被视为一个表的别名,所以应该从from
条款引用。
with subQ(attr1) as
(
SELECT attr1 FROM tab1
)
SELECT tab2.attr2
FROM tab2
intersect
select tab2.attr1 from subQ
我喜欢NOT EXISTS
反而是更清晰,不易出错:
WITH CTE as
(
SELECT attr1 FROM tab1
)
SELECT tab2.attr2 FROM tab2
WHERE NOT EXISTS
(
SELECT 1 FROM CTE WHERE CTE.tab1=tab2.attr2
)
但是,我没有看到需要的CTE,在所有。
Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?