如何解决这个问题:MYSQL SELECT如果为true则选择其他选择b?

时间:2016-11-01 07:38:08

标签: mysql sql

如果user.*,我想选择chat.chat_type IS NULL,但如果chat.chat_type = 1

我想选择群组。*

SELECT    
    CASE
        WHEN chat.chat_type IS NULL THEN  user.*
        WHEN chat.chat_type =1 THEN  group.*
    END,
    x,y 
FROM `chat` LEFT JOIN group ...

我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

你必须使用Union:

SELECT user.* from user join ... where chat.chat_type is null
Union 
SELECT `Group`.* from `Group` join .... where chat.chat_type =1

如果用户和组的列数不同,则必须在列数较少的情况下使用默认值。

提示:因为Group是关键字,所以你应该重命名你的表

答案 1 :(得分:0)

所描述的数据库设计不太好,因为聊天表中有一个ID,可以是用户ID或组ID。因此,你不能在这个列上有一个约束(外键),这样就可以在那里放任何值,即使是一个不存在的ID。

无论如何,根据给定的设计,要获得用户或组,您可以在已提及的条件下连接两个表。然后使用COALESCE查看结果行中是否有用户或组。

select c.from, coalesce(u.name, g.name) as to_name
from chat c
left join usr u on c.chat_type is null and c.to = u.user_id
left join grp g on c.chat_type = 1 and c.to = g.group_id
where c.chat_type is null or c.chat_type = 1;