是否可以實現類似這樣的事情?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?