2014-03-25 162 views
0

我正在SQL中使用相關和不相關子查詢,我試圖用這兩種類型的查詢得到相同的結果。我的問題是與我的不相關的子查詢。查詢運行但不返回任何結果。我的相關子查詢確實會返回結果,就像它應該那樣。我需要幫助,試圖找出我的簡單不相關的子查詢是否寫入不正確。任何幫助是極大的讚賞。我的查詢如下:SQL中的相關和不相關子查詢

--non-相關子查詢

SELECT * 
FROM hr.bc_products p 
WHERE p.sku NOT IN (SELECT ol.sku FROM hr.bc_orderlines ol); 

--correlated子查詢

SELECT * 
FROM hr.bc_products p 
WHERE NOT EXISTS (SELECT ol.sku FROM hr.bc_orderlines ol WHERE ol.sku = p.sku); 
+1

fwiw,我傾向於這樣寫一個排除連接:'SELECT p。* FROM hr.bc_products p LEFT JOIN hr.bc_orderlines ol ON p.sku = ol.sku WHERE ol.sku IS NULL' –

+0

說得通。讓我試試看。 – Sonic

回答

0

我終於想通了什麼問題了。在查看每個查詢的結果後,我意識到空值影響結果。我通過排除空值更新了不相關的子查詢。我更新的非相關子查詢的作品,看起來像這樣:

--non-相關子查詢

SELECT * 
FROM hr.bc_products p 
WHERE p.sku NOT IN (SELECT ol.sku FROM hr.bc_orderlines ol WHERE ol.sku IS NOT NULL); 

希望這會幫助別人避免在將來出現問題。