2013-12-16 33 views
0

我有2個表: 商傢俱有3列MERCHANTID,MEMBERID,MERCHANTNAME 會員具有3列MEMBERID,ReportID,成員名稱SQL查詢加入2個表和獲取必需數據

樣品值是:

MerchantID MemberID MerchantName 
1101  101  ABC 
1102  102  DEF 
1103  103  XYZ 

MemberID ReportID MemberName 
101  112  GHI 
101  111  JKL 
101  115  MNO 
102  111  kjh 
102  116  hgf 
102  117  oiu 
103  118  hgh 
103  119  jhf 

我需要獲得具有與111報告ID無關的成員ID的MerchantNames。

The query o/p should be: XYZ. 

請讓我知道最優化的SQL查詢可以實現這一點。 在此先感謝。

+0

我試着用NOT IN的東西,但從來沒有返回所需O/p。錯過了使用NOT EXISTS,現在完美運行。謝謝! – user2967948

+1

我知道你現在有一個工作解決方案,但只是想我會指出,不應該在這種情況下工作。 – Drumbeg

回答

1

這是EXISTS操作一個經典的用例:

SELECT MerchantName 
FROM Merchant 
WHERE NOT EXISTS (SELECT 1 
        FROM Member 
        WHERE Member.MemberId = Merchant.MemberId AND 
          ReportId = 111) 
+0

非常感謝您的及時回覆! – user2967948

+0

您是否知道Oracle不得不添加特殊代碼來處理不正確的'SELECT 1',因爲互聯網上的城市傳說都比正確的'SELECT *'更好?所以,'SELECT 1'起作用,但我還是很畏懼看到它。它永遠不會活過。 – ErikE

1

與JOIN:

SELECT mer.MerchantName FROM [Merchant] mer 
LEFT JOIN [Member] mem ON mer.MemberId = mem.MemberId 
    AND mem.ReportId != 111; 

或者

SELECT mer.MerchantName FROM [Merchant] mer 
LEFT JOIN [Member] mem ON mer.MemberId = mem.MemberId 
    AND mem.ReportId <> 111;