içine yerleştirilmiş SELECT'ten çoklu sütun döndürme Bunu yapmak için daha iyi bir yol var mı?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
İdeal ilgili tablosundan ad ve e-posta döndü tek CASE
bölümü var istiyorum.
sayesinde iyi çalışıyor. Tamamen anladığımdan emin değilim - "LEFT OUTER", sadece ilgili parantez içindeki karşılaştırma "true" değerini değerlendirdiğinde yapılmış mı? –
Aha! Sanırım şimdi anladım. Dava, SELECT bölümüne 'seçimler' ekler, yani eğer subs.member_type = 'member'' ise, SELECT biti: 'subs. *, M.username, m.email' olacaktır. Böylece ma üzerindeki 'SOL DIŞARI' yürütülür, ancak sonuç kümesine dahil edilmez. Sağ? Bunun, tüm * .id sütunlarının "primary_keys" olması nedeniyle herhangi bir performans etkisinin olmayacağını düşünüyorum. –