Mysql 连接3个表-如果行不存在

Mysql 连接3个表-如果行不存在,mysql,sql,Mysql,Sql,我需要加入表格 之间的消息 使用者 地位 我有一个SQL: 从messages_-between中选择messages_-between.*、users.*、status.* 左加入用户 ON users.uid=messages\u在.user\u 2之间 左连接状态 ON status.uid=messages\u在.user\u 2之间 其中,messages_在.user_1=123之间 因此,这个查询工作正常,但问题是当消息中没有行时。 uid是在user_1或user_2列中使用的代

我需要加入表格

之间的消息 使用者 地位 我有一个SQL: 从messages_-between中选择messages_-between.*、users.*、status.* 左加入用户 ON users.uid=messages\u在.user\u 2之间 左连接状态 ON status.uid=messages\u在.user\u 2之间 其中,messages_在.user_1=123之间

因此,这个查询工作正常,但问题是当消息中没有行时。 uid是在user_1或user_2列中使用的代码

有什么建议吗? 谢谢

[编辑]

我的表格结构: 用户有以下列:id、名称、密码、密码、uid 状态有以下列:id、uid、状态[如果他/她在线或离线] 消息_之间有以下列:id、user_1、user_2、mid


因此,我想显示users.name、status.status、messages\u-between.user\u 2、messages\u-between.mid

您可以尝试以下查询。当您需要联接表中的null时,不应该在where子句中添加conditiona。您也可以使用null进行检查,或者在join子句中添加conditiona。 此外,还需要更改left join的顺序,因为您希望从users表中检索所有的record,并为记录和状态记录之间缺少的消息_返回空值

       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 
这是你想要的吗

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;

这将保留所有用户,并在用户之间有适当的消息时提供附加信息。

您想实现什么?如果在messages\u-between中没有一行,您希望输出什么?澄清您的问题您希望实现什么?抱歉,当messages\u-between中没有一行时,我希望显示null尝试重写您的查询以获得您想要的所有记录之后的表,然后外部连接其余两个表。用户uid和状态uid如何能够指向表中messages\u between的同一列?不,它返回了所有用户,我想向用户显示他们在messages\u between中的位置。user\u 2I已编辑查询,基本上从messages\u between开始,然后是users和status。你能检查一下这是否有效吗?不完全正确,where条件被移动到join子句