2016-09-05 40 views
0

我有以下表格:SQL發現在一個表中的所有行也存在於另一個表

  1. UserConversation:帳戶及的conversationId
  2. ConversationMessageReceipt:用戶id,的conversationId,conversationMessageId等欄目
  3. ConversationMessageReceipt :conversationId,conversationMessageId,userid

我可以添加更多的細節,但我基本上想要在一個t中查找行也可以存在於另一個表中,即從第一個表中找到的所有行必須存在於另一個表中。

有沒有辦法找到第二個表中的所有行或獲得空結果?

感謝

+0

這是一種很難解釋,但基本上,如果你有兩個表,我想找到一個所有行表存在於另一個表中。如果在第二個表中找不到所有的行,那麼我不想從第二個表得到任何結果。 – Sonam

+0

我認爲左連接可能是我需要從第二個表中的第一個表中找到行或者沒有。 – Sonam

回答

1

嘗試像下面加入他們:

SELECT * 
FROM UserConversation uc INNER JOIN ConvesationMessageReceipt cmr 
ON uc.userId = cmr.userId 
AND uc.conversationId = cmr.conversationId 
+0

謝謝。我會嘗試 – Sonam

+1

@Sonam:請注意,這可能(也可能會)多次從'UserConversation'返回行。如果您只想從「UserConversation」中查看每行,Unnikrishnan的「存在」版本更好 –

1

使用INNER JOIN您的方案,

SELECT * FROM UserConversation INNER JOIN ConvesationMessageReceipt 
ON UserConversation.userId = ConvesationMessageReceipt.userId 
AND UserConversation.conversationId = ConvesationMessageReceipt.conversationId 

,或者你想從第一臺使用LEFT所有記錄連接或左OUTER JOIN

SELECT * FROM UserConversation LEFT JOIN ConvesationMessageReceipt 
ON UserConversation.userId = ConvesationMessageReceipt.userId 
AND UserConversation.conversationId = ConvesationMessageReceipt.conversationId 
1

如果你想檢查表2中的表1的數據,還可以使用EXISTS關鍵字..

SELECT * 
FROM UserConversation uc 
WHERE EXISTS (SELECT 1 
    FROM ConversationMessageReceipt cm 
    WHERE uc.userId=cm.userid 
     AND uc.conversationid=cm.conversationid) 
相關問題