[英]Select and join from to tables in mysql
我有用户表和message_threads表。
thread_message tables
Id | ToUserId | FromUserId
----------------------------------
1 | 1 | 2
2 | 2 | 3
users Table
Id | Name
-----------------
1 | Ali
2 | Mahdi
3 | Hossein
Ali
希望从thread_message
获取其Id
在ToUserId
或FromUserId
之一中的所有记录,并获取其他用户对的Name(在此示例中为Mahdi
)。 请求记录时,Ali发送其Id
。
这个问题的SELECT & JOIN语句是什么?
在这个例子中结果应该是
(Id ,ToUserId, FromUserId, Name)
(1, 1, 2, Mahdi)
尝试这个:
SELECT T.Id,
T.ToUserId,
T.FromUserId,
(CASE WHEN T.ToUserId = tu.Id THEN fu.Name WHEN T.FromUserId = tu.Id THEN tu.Name ELSE '' END) Name
FROM thread_message T
LEFT OUTER JOIN users tu ON T.ToUserId = tu.Id
LEFT OUTER JOIN users fu ON T.FromUserId = tu.Id
WHERE 1 IN (T.ToUserId, T.FromUserId);
另一种方法在where
(或on
)子句中进行所有比较:
select tm.*
from thread_message tm cross join
(select id
from users
where name = 'Ali'
) x
where x.id in (tm.ToUserId, tm.FromUserId);
编辑:
如果您的ID为“ Ali”,则答案甚至更简单:
select tm.*
from thread_message tm
where $id in (tm.ToUserId, tm.FromUserId);
(select t.*, u.Name from thread_message t left join users u on FromUserId=u.Id where ToUserId=1)
union
(select t.*, u.Name from thread_message t left join users u on ToUserId=u.Id where FromUserId=1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.