2013-05-30 131 views
0

我試圖找出inventory_detail表(訂單號實際上是inventory_header)中的任何訂單,其中load_store或unload_store的值在store_Code中根本不存在extrainfo_stores表中的字段。WHERE NOT EXISTS查詢不起作用

下面的查詢返回一些訂單在哪裏,當我在extrainfo_stores表中查找訂單回來了,我看到確切的值,在該表load_store或unload_store,所以這顯然不工作...

SELECT bh.ord_number, bi.* 
FROM inventory_header bh 
inner join inventory_detail bi on inventory_id = bh.inventory_id 
WHERE NOT EXISTS 
    (
    SELECT null 
    FROM extrainfo_stores d 
    WHERE d.ord_number = bh.ord_number 
     and bi.load_store <> d.store_code 
     and bi.unload_store <> d.store_code 
    ) 
+1

爲什麼要使用SELECT NULL?每個存在的檢查我見過使用「SELECT *」或「SELECT 1」。 – StingyJack

+2

@SingyJack它沒有任何區別。有些人在'EXISTS'上使用'SELECT NULL'來表明它們實際上並沒有檢索任何數據(儘管我更喜歡'SELECT 1') – Lamak

+1

「select null」將在EXIST語句中工作,因爲EXIST語句返回true if結果集中至少有一條記錄。帶有一個唯一字段爲「null」的記錄的結果集仍然是結果集,因此EXIST將返回true。 –

回答

1

它應該是這樣的:

SELECT bh.ord_number, bi.* 
    FROM inventory_header bh 
inner join inventory_detail bi on inventory_id = bh.inventory_id 
WHERE NOT EXISTS (SELECT null 
        FROM extrainfo_stores d 
        WHERE d.ord_number = bh.ord_number 
         and (bi.load_store = d.store_code or bi.unload_store = d.store_code)) 
+0

這很完美。我想錯誤的做法是不排除被排除在外並將這兩種情況分組。 :) 謝謝您的幫助。 –

0

這是你在找什麼?

SELECT bh.ord_number, bi.* 
FROM inventory_header bh 
join inventory_detail bi 
    on inventory_id = bh.inventory_id 
join extrainfo_stores d 
    on d.ord_number = bh.ord_number 
Where bi.load_store <> d.store_code 
    or bi.unload_store <> d.store_code