不要認為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'
mysql 選擇列 選擇MySQL表的前N列
請先看看bill karwin的 answer.但是,如果您知道如何訂購列名,那麼可能會有乙個使用動態查詢的解決方案.要從表中選擇所有列名,可以使用如下查詢 select column name from information schema columns where table schema d...
mysql 選擇索引 mysql選擇索引
1 盡量為用來搜尋 分類或分組的資料列編制索引,不要為作為輸出顯示的資料列編制索引。最適合有索引的資料列是那些在where子句中資料列,在聯結子句 現的資料列,或者是在group by order by子句 現的資料列。select 後的資料列最好不要用索引。2 綜合考慮各資料列的維度。資料列的維度...
mysql 插入前查重 Mysql插入資料前查重
常見插入資料的sql insert into 插入資料庫時會檢查主鍵是否存在,存在會報錯 replace into 替換資料庫記錄,需要表中有主鍵或者unique索引,如果資料庫已存在的資料,會先刪除該資料然後新增。不存在的資料效果和insert into 一樣。replace into govre...