看看這個SQL搗鼓我的問題http://sqlfiddle.com/#!9/cf31d3/1在MySQL中,如何在結果中包含我測試的每個值時選擇結果?
的簡化版本我有2個表 - 聊天消息和聊天收件人是這樣的:
樣品ChatMessages數據:
示例ChatRecipients數據:
基本上我想僅查詢包含一組用戶ID的消息 - 例如,顯示鮑勃,蘇珊,和切爾西之間交換唯一消息。如果我拉了用戶ID(1,2,3)什麼是得到的消息僅涉及這些3人的最佳方法一個新的聊天窗口?
這是我當前查詢的簡化版本(不產生正確的結果):
SELECT
cm.message_id as 'message_id',
cm.from_id as 'from_id',
(SELECT u.user_fname as 'fname' from Users u where u.user_id = cm.from_id) as 'firstName',
(SELECT u.user_lname as 'lname' from Users u where u.user_id = cm.from_id) as 'lastName',
cm.chat_text as 'chat_text'
FROM
ChatMessages cm
INNER JOIN
ChatRecipients cr
ON
cm.message_id = cr.message_id
INNER JOIN
Users u
ON
cm.from_id = u.user_id
WHERE
cm.from_id in ('1', '2', '3')
AND
cr.user_id in ('1', '2', '3')
據我所知,使用「IN」操作不正確針對這種情況,但我是一個位卡住了。感謝任何人願意幫助!
編輯:
我的樣本輸出返回數據的每一行,任何上述用戶ID中包含的,看起來像這樣:
我的目標是將輸出限制爲只有在我測試的EVERY用戶ID的消息與message_id相關聯。例如,如果message_id 32是FROM user_id 7和TO user_id 11 & 3,我想檢索該記錄。相反,如果message_id 33是FROM user_id 7和user_id 11 & 4我不想檢索該記錄。
1.爲什麼要使用而不是簡單的JOIN從ChatMessages釐米,ChatRecipients CR,用戶üWHERE cm.message_id = cr.message_id AND cm.from_id = u.user_id和......你在哪裏。 ..? 2.什麼「不產生正確結果」是指?預計什麼,你會得到什麼? – Gavriel
嘿@Gavriel感謝您的回覆。我需要內部連接這些表中的每一個,以將輸出限制爲符合我所有3個表中的標準的數據。在我的輸出中,我目前得到的所有消息都包含所提到的任何用戶ID,因爲我使用了'IN'語句。如果這會有幫助,我可以發佈示例輸出。 – Robert
請添加例子,因爲我們不讀你的想法(應該是什麼正確的輸出)... – Gavriel