有一个更好的方法吗?
SELECT subs. * ,
CASE subs.member_type
WHEN 'member' THEN
( SELECT CONCAT_WS( ' ', members.first_name, members.last_name )
FROM members
WHERE members.id = subs.member_id)
ELSE
( SELECT members_anon.username
FROM members_anon
WHERE members_anon.id = subs.member_id)
END AS fullname,
CASE subs.member_type
WHEN 'member' THEN
( SELECT members.email
FROM members
WHERE members.id = subs.member_id)
ELSE
( SELECT members_anon.email
FROM members_anon
WHERE members_anon.id = subs.member_id)
END AS email
FROM subs
WHERE subs.item_id =19
AND subs.item_type = 'blog'
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望只有一个CASE部分从相关表中返回姓名和电子邮件.
我会在两个表上使用左外连接:
SELECT subs. * ,
CASE subs.member_type
WHEN 'member' THEN CONCAT_WS( ' ', m.first_name, m.last_name )
ELSE ma.username
END AS fullname,
CASE subs.member_type
WHEN 'member' THEN m.email
ELSE ma.email
END AS email
FROM subs
LEFT OUTER JOIN members m on (m.id = subs.member_id)
LEFT OUTER JOIN members_anon ma on (ma.id = subs.member_id)
WHERE subs.item_id =19
AND subs.item_type = 'blog'
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
关于唯一的一种情况,如果您需要结果集上有两个不同的列,则需要两个case句子。
| 归档时间: |
|
| 查看次数: |
9099 次 |
| 最近记录: |