繁体   English   中英

选择并加入到MySQL中的表

[英]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获取其IdToUserIdFromUserId之一中的所有记录,并获取其他用户对的Name(在此示例中为Mahdi )。 请求记录时,Ali发送其Id

这个问题的SELECTJOIN语句是什么?

在这个例子中结果应该是

(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM