从mysql

时间:2015-12-17 11:56:33

标签: mysql sql database select join

我有用户 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位于ToUserIdFromUserId之一,并获取其他用户对的名称(在此示例中Mahdi)。 当请求记录时,Ali发送他的Id

什么是 SELECT &这个问题的 JOIN 声明?

在此示例中,结果应为

(Id ,ToUserId, FromUserId, Name)

(1, 1, 2, Mahdi)

3 个答案:

答案 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)