¿Hay una mejor manera de hacerlo?Devolviendo varias columnas desde SELECT anidado dentro de CASE MySQL
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
Idealmente me gustaría tener sólo una CASE
sección que regresó nombre y correo electrónico de la tabla correspondiente.
Gracias por su respuesta, que funciona bien. Sin embargo, no estoy seguro de haberlo entendido totalmente. ¿Las uniones "LEFT OUTER" solo se realizan si la comparación dentro de sus respectivos paréntesis evalúa "verdadero"? –
Aha! Creo que lo entiendo ahora El caso 'agrega' selecciones a la parte SELECCIONAR, por lo que si 'subs.member_type = 'member'' entonces el bit SELECT será:' subs. *, M.nombre de usuario, m.email'. Por lo tanto, el 'LEFT OUTER' en ma se ejecutará pero no se incluirá en el conjunto de resultados. ¿Derecha? Supongo que esto no tendrá ningún impacto en el rendimiento ya que todas las columnas '* .id' son' primary_keys'? –