I would use left outer joins in both tables:
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
As for the only case, if you need two different columns in your result set, you will need two case clauses.
Pablo santa cruz
source share