我有用户和 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
之一,并获取其他用户对的名称(在此示例中Mahdi
)。
当请求记录时,Ali发送他的Id
。
什么是 SELECT &这个问题的 JOIN 声明?
在此示例中,结果应为
(Id ,ToUserId, FromUserId, Name)
(1, 1, 2, Mahdi)
答案 0 :(得分:0)
试试这个:
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);
答案 1 :(得分:0)
另一种方法是在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);
编辑:
如果你的身份是“阿里”,那么答案就更简单了:
select tm.*
from thread_message tm
where $id in (tm.ToUserId, tm.FromUserId);
答案 2 :(得分:0)
(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)