![](/img/trans.png)
[英]Foreign key relationships with the same table for two different foreign key columns
[英]Mysql - how to get data for two foreign key columns of same table
我的数据库中有两个表
表:具有列的users
: id
, username
, email
etc.s
表: users_messages
包含列: id
, to
, from
, messages
, sent_time
列to
和from
是关键users
从users
表。 问题是我需要:
“从用户名和消息中选择所有用户”。
例如,如果表格行如下所示:
From, To, Message
11, 14, Hi, How are you
14, 11, Hello,
如果11是约翰,14是标记,那么我需要输出如下:
From, To, Message
john, mark, Hi, How are you
mark, john, Hello,
使用我的查询,我只能从列或列获取用户名,但不能同时获取两者的用户名。 如何执行向我和两个用户名提供的查询?
以下查询给出了空结果:
SELECT u.username, m.message, m.from, m.to
FROM `users_messages` m, `users` u
where
m.from = u.id and m.to = u.id
LIMIT 0 , 30
我尝试过其他查询,但无法获得所需的输出。 我是否还需要自助加入消息表?
SELECT u1.username AS "sender", u2.username AS "recipient", m.message, m.from, m.to
FROM `users_messages` m
LEFT JOIN `users` u1 ON (u1.id = m.from)
LEFT JOIN `users` u2 ON (u2.id = m.to)
WHERE m.from = XX OR m.to = XX
尝试这个
select u.`name` as `FROM`, u2.`name` as `TO`, `Message`
from users_messages um
inner join users u On um.`From` = u.id
inner join users u2 On um.`To` = u2.id
LIMIT 0 , 30
如果您想从一个用户获取指定的消息,请添加此消息
WHERE u.`name` = 'mark' // to get messages FROM mark
或这个
WHERE u2.`name` = 'mark' // to get messages TO mark
是的自我加入可以帮助您实现所需的输出:
SELECT u1.username, m.message, u2.username
FROM users_messages m, users u1, users u2
where
m.from = u1.id and m.to = u2.id
LIMIT 0 , 30
假设:from和to不会有空值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.