2017-07-27 20 views
0

我需要一些sql查詢幫助。如何選擇1個表中不存在的數據?

我有1個表是dbo.invoice。

| PO_NO  | TYPE   | MOVEMENT_TYPE  | QUANTITY | SALESREF | FLOW | 
|---------- |----------- |--------------- |---------- |---------- |------ | 
| 10001001 | G.RECEIPT  | 101    | 1000.00 | 5001  | S  | 
| 10001001 | G.RECEIPT  | 101    | 2000.00 | 5002  | S  | 
| 10001001 | G.RECEIPT  | 122    | 1000.00 | 5001  | H  | 
| 10001001 | G.RECEIPT  | 122    | 1500.00 | 5002  | H  | 
| 10001001 | INVOICE  |     | 1000.00 | 5001  | S  | 
| 10001001 | INVOICE  |     | 2000.00 | 5002  | S  | 
| 10001001 | INVOICE  |     | 1500.00 | 5002  | H  | 

我需要的輸出顯示類型= G.RECEIPT沒有對TYPE =存在發票SALESREF = 5001 &流量= H的任何數據」,它會diplays這樣的: -

| PO_NO  | TYPE   | MOVEMENT_TYPE  | QUANTITY | SALESREF | FLOW | 
|---------- |----------- |--------------- |---------- |---------- |------ | 
| 10001001 | G.RECEIPT  | 122    | 1000.00 | 5001  | H  | 

我該怎麼辦呢?

修訂

這是我當前的查詢

SELECT * FROM dbo.INVOICE 
WHERE MVT_TYPE = '122' and TYPE NOT IN (SELECT TYPE FROM DBO.PO where flow ='H') 
+0

歡迎來到SO。你不能同時擁有MYSQL和SQL-SERVER;請編輯只留下正確的一個。 – Eli

+1

至於你的問題,你試過一個查詢,並得到錯誤的結果? – Eli

+0

@ Eli ..我只是更新了我的文章 – Safwan

回答

2

使用NOT EXISTS:

SELECT * 
FROM dbo.INVOICE 
WHERE SALESREF = 5001 AND FLOW = 'H' AND NOT EXISTS (SELECT 1 
FROM dbo.INVOICE 
WHERE SALESREF = 5001 AND FLOW = 'H' AND TYPE = 'INVOICE') 

所有SALESREFs:

SELECT * 
FROM dbo.INVOICE i 
WHERE FLOW = 'H' AND NOT EXISTS (SELECT 1 
FROM dbo.INVOICE 
WHERE FLOW = 'H' AND TYPE = 'INVOICE' AND SALESREF = i.SALESREF) 
+0

@safwan是你正在尋找的答案嗎? – Ashu

+0

謝謝你的回答。但是如果我得到另一個超過1的SALESREF除了salesref = 5001? – Safwan

+0

@Safwan'SELECT 1'只是幫助EXISTS條款返回TRUE – cloudsafe

0

您可以使用相關NOT EXISTS:

SELECT * FROM dbo.INVOICE i 
WHERE type='G.RECEIPT' 
AND NOT EXISTS(
SELECT * FROM dbo.INVOICE i2 
WHERE type='INVOICE' 
AND i.PO_NO=i2.PO_NO 
AND i.QUANTITY=i2.QUANTITY 
AND i.SALESREF=i2.SALESREF 
AND i.FLOW=i2.FLOW 
) 

這更一般處理的要求,所以它得到所有G.RECEIPT沒有的匹配INVOICE,而無需爲SALESREF或任何其他列進行硬編碼。

相關問題