看看这个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