[英]MySQL inner join AND turn rows into colums
我很難弄清楚如何為我的查詢創建正確的語法。
這就是我要拉的東西。 我有2張桌子。
Table 1 : Fields (user_id, name)
Table 2 : Fields (user_id, type, are_code, phone_number).
表1每個user_id只能有1條記錄。
1 | John Doe
表2每個user_id最多可以有3條記錄:
1 | Home | 123 | 456.4567
1 | Work | 000 | 987.1467
1 | Mobi | 098 | 987.1756
我如何選擇所有內容,以便我的表格將導致如下所示的1條記錄:
user_id | name | home# | work# | mobi#
我試過這個,根據表2中的條目數量復制和加倍行。
SELECT a.user_id,
b.area_code, b.phone_number
FROM users a
INNER JOIN user_contact_phones b ON a.user_id = b.user_id
不幸的是,返回3行並不好:(。
1 | John Doe | area | home# |
1 | John Doe | area | work# |
1 | John Doe | area | mobi# |
任何幫助和/或指針將不勝感激。
試試這個:
SELECT
u.user_id,
u.name,
MAX(CASE WHEN p.type = 'Home' THEN phone_number END) HomeNumber,
MAX(CASE WHEN p.type = 'Work' THEN phone_number END) WorkNumber,
MAX(CASE WHEN p.type = 'Mobi' THEN phone_number END) MobiNumber
FROM phones p
JOIN users u ON p.user_id = u.user_id
GROUP BY u.user_id, u.name
輸出:
| USER_ID | NAME | HOMENUMBER | WORKNUMBER | MOBINUMBER |
|---------|----------|------------|------------|------------|
| 1 | John Doe | 456.4567 | 987.1467 | 987.1756 |
在這里小提琴
另請注意,如果u.user_id
確定了u.name
,則可以刪除u.name
...這很可能是因為它似乎是主鍵。 這樣可以加快速度。
注意:這假設您不能為同一個用戶提供多個相同的類型(就像在示例數據中一樣,它只有一列用於家庭,工作和移動。
使用user_contact_phones.type
來獲得您想要的內容,例如 -
SELECT a.user_id,
b.area_code, b.phone_number
FROM users a
INNER JOIN user_contact_phones b ON a.user_id = b.user_id where b.type='Home'
這是一個有效的解決方案:
select u.user_id, u.name,
thome.area_code as home_area_code, thome.phone_number as home_phone_number,
twork.area_code as work_area_code, twork.phone_number as work_phone_number,
tmobi.area_code as mobi_area_code, tmobi.phone_number as mobi_phone_number
from table1 u
left outer join table2 thome on u.user_id = thome.user_id and thome.type = 'Home'
left outer join table2 twork on u.user_id = twork.user_id and twork.type = 'Work'
left outer join table2 tmobi on u.user_id = tmobi.user_id and tmobi.type = 'Mobi'
請注意,如果特定類型的記錄不存在,則使用左外連接而不是內連接。 您將使用左外連接為結果集中的那些列獲取空值。 使用內部聯接,您將無法獲得沒有所有三種類型的用戶的結果。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.