如何使用具有OR条件的2个连接表来选择sql数据而没有重复记录

时间:2018-02-22 03:22:39

标签: mysql select

我有一个mysql select语句如下: -

select user.username, chat.from_user,chat.to_user,chat.message,chat.date_created 
from chat join user on (chat.from_user or chat.to_user) in (user.user_id)
    where(chat.from_user = 3 or chat.to_user = 3) and chat.chat_id IN
(SELECT distinct (MAX(chat.chat_id) )
    FROM chat GROUP BY chat_group_id);

这是我的结果

enter image description here

我总是得到用户名= admin。我的期望结果是用户名将从/向用户正确。

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

SELECT 
    IF(chat.from_user=3, to_user
        , IF(chat.to_user=3, form_user, 0)) AS username,
    chat.from_user,chat.to_user,chat.message,chat.date_created 
    FROM chat 
    LEFT JOIN user fr_user ON chat.from_user = user.user_id
    LEFT JOIN user to_user ON chat.to_user = user.user_id -- since you only want to show the TO_USERNAME, you can remove above line
        WHERE (chat.from_user = 3 OR chat.to_user = 3) and chat.chat_id 
    IN
    (SELECT distinct (MAX(chat.chat_id) )
        FROM chat GROUP BY chat_group_id);

答案 1 :(得分:0)

我想你打算:

select u.username, c.from_user, c.to_user, chat.message, c.date_created 
from chat c join
     user u
     on u.user_id in (c.from_user, c.to_user) 
where 3 in (c.from_user, c.to_user) and 
      c.chat_id in (select max(c2.chat_id)
                    from chat c2
                    group by chat_group_id
                   );