如果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 ...
我怎么能做到这一点?
答案 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;