如何基于多列连接两张表,分别获取收发用户名称?
如何分别获取消息发送方和接收方的用户名?
这个问题我之前也碰到过!你现在的查询只用了一次JOIN还加了OR条件,数据库根本没法区分返回的名字是发送方还是接收方的。解决办法很简单——对users表做两次JOIN操作,给表起不同的别名,分别对应发送方和接收方的用户信息就行。
具体来说,你可以给users表分别起两个别名(比如tx_users代表发送方用户表,rx_users代表接收方用户表),然后用messages.Tx User Id关联tx_users.User Id,用messages.Rx. User Id关联rx_users.User Id,这样就能精准拿到两个用户名了。
下面是修正后的完整查询语句:
SELECT tx_users.`User name` AS `Tx User "Name"`, rx_users.`User name` AS `Rx. User "Name"`, messages.Date, messages.Message FROM messages JOIN users AS tx_users ON messages.`Tx User Id` = tx_users.`User Id` JOIN users AS rx_users ON messages.`Rx. User Id` = rx_users.`User Id`;
我再拆解下几个关键点:
- 给users表起两个别名是核心,这样能在查询里区分开两张“虚拟”的用户表,不会混淆
- 用
AS给结果列起别名,让输出的列名完全匹配你想要的Tx User "Name"和Rx. User "Name" - 两次JOIN都是精准关联对应ID,避免了之前
OR条件带来的模糊匹配问题
另外注意,如果你的字段名里有空格(比如Tx User Id),一定要用反引号`把字段名括起来,防止数据库解析出错哦。
内容的提问来源于stack exchange,提问作者Amir-M
相关产品推荐
相关产品推荐

