不要認為GROUP BY是必需的 . 雖然如果一個孩子有2個父記錄,你可能想用它來將2個父母分組到一行 - 但不確定這是否是你的要求 . 因為如果一個孩子有2個父母,那么將為該孩子返回的父母是未定義的 .
假設所有孩子都有父母,所有父母都會有姓,姓和電子郵件: -
SELECT
k.*,
p.*,
u1.meta_value AS parent_lastname,
u2.meta_value AS parent_firstname,
u3.meta_value AS parent_email
FROM kids k
INNER JOIN relations r ON k.ID = r.kid_id
INNER JOIN parents p ON p.user_id = r.user_id
INNER JOIN usermeta u1 ON r.user_id = u1.user_id AND u1.meta_key = 'last_name'
INNER JOIN usermeta u2 ON r.user_id = u1.user_id AND u1.meta_key = 'first_name'
INNER JOIN usermeta u3 ON r.user_id = u1.user_id AND u1.meta_key = 'email'
如果該假設是錯誤的,則將INNER JOIN更改為LEFT OUTER JOIN
SELECT
k.*,
p.*,
u1.meta_value AS parent_lastname,
u2.meta_value AS parent_firstname,
u3.meta_value AS parent_email
FROM kids k
LEFT OUTER JOIN relations r ON k.ID = r.kid_id
LEFT OUTER JOIN parents p ON p.user_id = r.user_id
LEFT OUTER JOIN usermeta u1 ON r.user_id = u1.user_id AND u1.meta_key = 'last_name'
LEFT OUTER JOIN usermeta u2 ON r.user_id = u1.user_id AND u1.meta_key = 'first_name'
LEFT OUTER JOIN usermeta u3 ON r.user_id = u1.user_id AND u1.meta_key = 'email'