[英]How do I combine multiple rows into one row in mysql
我有一個連接4個表的查詢。 這些表是用戶,用戶信息,電子郵件和電話。 用戶可以擁有一個或多個電話和電子郵件。
這是SQL查詢:
SELECT ur.login_id as loginId, ue.user_email_address as email, up.phone_number as phone
FROM greydeltadb.gd_user ur
LEFT JOIN greydeltadb.gd_user_info uri ON uri.user_id=ur.user_id
INNER JOIN greydeltadb.gd_user_emails ue ON ur.user_id = ue.user_id
INNER JOIN greydeltadb.gd_phone up ON ur.user_id = up.user_id
ORDER BY ur.login_id
當我執行此查詢時,對於有2封電子郵件和2部電話的用戶,我得到的結果如下:
loginId email phone
abc abc@gmail.com 123456
abc abc@gmail.com 798446
abc def@gmail.com 123456
abc def@gmail.com 798446
然后,我了解了GROUP_CONCAT(),更新后的查詢是:
SELECT ur.login_id, GROUP_CONCAT(ue.user_email_address) as emails,
GROUP_CONCAT(up.phone_number) as phones
FROM greydeltadb.gd_user ur
LEFT JOIN greydeltadb.gd_user_info uri ON uri.user_id=ur.user_id
INNER JOIN greydeltadb.gd_user_emails ue ON ur.user_id = ue.user_id
INNER JOIN greydeltadb.gd_phone up ON ur.user_id = up.user_id
GROUP BY ur.login_id
該查詢返回結果:
loginId email phone
abc abc@gmail.com, def@gmail.com,abc@gmail.com, def@gmail.com 123456, 798446,123456, 798446
但我希望輸出為:
loginId email phone
abc abc@gmail.com, def@gmail.com 123456, 798446
請幫忙。
只需使用DISTINCT子句,請參閱GROUP_CONCAT的文檔:
> GROUP_CONCAT([DISTINCT] expr [,expr ...]
> [ORDER BY {unsigned_integer | col_name | expr}
> [ASC | DESC] [,col_name ...]]
> [SEPARATOR str_val])
在MySQL中,您可以獲取表達式組合的串聯值。 若要消除重復的值,請使用DISTINCT子句。 要對結果中的值排序,請使用ORDER BY子句.................
如有查詢,請僅使用:
SELECT ur.login_id,
GROUP_CONCAT( DISTINCT ue.user_email_address ) as emails,
GROUP_CONCAT( DISTINCT up.phone_number ) as phones
.....
您只需要一個distinct
SELECT ur.login_id,
GROUP_CONCAT(distinct ue.user_email_address) as
emails,
GROUP_CONCAT(distinct up.phone_number) as
phones
FROM greydeltadb.gd_user ur
LEFT JOIN greydeltadb.gd_user_info uri ON
uri.user_id=ur.user_id
INNER JOIN greydeltadb.gd_user_emails ue ON
ur.user_id = ue.user_id
INNER JOIN greydeltadb.gd_phone up ON ur.user_id =
up.user_id
GROUP BY ur.login_id
首先,您沒有使用uri
,因此查詢中不需要它。
其次,您的left join
基本上什么也不做。 我懷疑您想要用戶,甚至那些沒有電話或沒有電子郵件的用戶。 如果是這樣的話:
SELECT ur.login_id,
GROUP_CONCAT(DISTINCT ue.user_email_address) as emails,
GROUP_CONCAT(DISTINCT up.phone_number) as phones
FROM greydeltadb.gd_user ur LEFT JOIN
greydeltadb.gd_user_emails ue
ON ur.user_id = ue.user_id LEFT JOIN
greydeltadb.gd_phone up
ON ur.user_id = up.user_id
GROUP BY ur.login_id ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.