加入3个表 - 如果行不存在

时间:2014-06-30 11:48:13

标签: mysql sql

我需要加入表格

  • messages_between
  • 用户
  • 状态

我有这个SQL:
     SELECT messages_between.*, users.*, status.* FROM messages_between LEFT JOIN users ON users.uid = messages_between.user_2 LEFT JOIN status ON status.uid = messages_between.user_2 WHERE messages_between.user_1 = 123

所以这个查询工作正常,但问题是当我在messages_between中没有一行时。
uiduser_1user_2

列中使用的代码

有什么建议吗? 感谢

[编辑]

我的桌子结构:
用户有列:id,name,password,password_s,uid
状态包含列:id,uid,状态[如果他/她在线或离线]
messages_between 包含列:id,user_1,user_2,mid

所以我想展示users.name,status.status,messages_between.user_2,messages_between.mid

2 个答案:

答案 0 :(得分:0)

您可以尝试以下查询。当您从连接表中需要null时,则不应在where子句中添加conditiona。您也可以使用null检查或在join子句中添加conditiona。 此外,您还需要更改左连接的顺序,因为您要从users表中检索所有recrods,并在记录和状态记录之间删除缺少的messages_的空值。

       SELECT messages_between.*, users.*, status.* FROM messages_between
       LEFT JOIN users
        ON users.uid = messages_between.user_2 AND messages_between.user_1 = 123
       LEFT JOIN status
        ON status.uid = messages_between.user_2 

答案 1 :(得分:0)

这是你想要的吗?

SELECT messages_between.*, users.*, status.*
FROM users LEFT JOIN
     messages_between
     ON users.uid = messages_between.user_2 and messages_between.user_1 = 123 LEFT JOIN
     status
     ON status.uid = users.uid;

这可以保留所有用户,并在"之间有适当的"消息时提供其他信息。