[英]How to do this query - GROUP_CONCAT
我想對具有以下內容的table A
進行SELECT
:
table_a:
╔══════════╦════════╗
║ GROUP_ID ║ NAME ║
╠══════════╬════════╣
║ 1 ║ Tom ║
║ 2 ║ Frank ║
║ 3 ║ Shilla ║
║ 1 ║ Scully ║
║ 1 ║ Jen ║
╚══════════╩════════╝
table_b:
╔════╦════════════╗
║ ID ║ GROUP_NAME ║
╠════╬════════════╣
║ 1 ║ Troopers ║
║ 2 ║ Clubs ║
║ 3 ║ Mavericks ║
╚════╩════════════╝
現在,我要顯示給定成員名稱的組:
SELECT GROUP_NAME,GROUP_CONCAT(table_a.NAME) MEMBERS
FROM table_a
JOIN table_b ON table_a.GROUP_ID = table_b.ID
WHERE
table_a.NAME = 'Scully'
我想得到這個:
╔════════════╦════════════════╗
║ GROUP_NAME ║ MEMBERS ║
╠════════════╬════════════════╣
║ Troopers ║ Tom,Scully,Jen ║
╚════════════╩════════════════╝
為什么此查詢不起作用?
SELECT b.GROUP_NAME, GROUP_CONCAT(c.Name) Members
FROM
(
SELECT GROUP_ID
FROM table_a
WHERE name = 'Scully'
) a
INNER JOIN table_b b
ON a.GROUP_ID = b.ID
INNER JOIN table_a c
ON a.GROUP_ID = c.GROUP_ID
GROUP BY b.GROUP_NAME
為了獲得更好的性能,請為table_b.GROUP_Name
添加UNIQUE
約束。
結果
╔════════════╦════════════════╗
║ GROUP_NAME ║ MEMBERS ║
╠════════════╬════════════════╣
║ Troopers ║ Tom,Scully,Jen ║
╚════════════╩════════════════╝
我認為您的WHERE條件過於嚴格。
WHERE table_b.GROUP_NAME = 'Troopers'
如果只有成員名稱,則需要使用另一個聯接獲取組ID:
試試這個:
SELECT table_b.GROUP_NAME, GROUP_CONCAT(table_a.NAME) MEMBERS
FROM table_a
JOIN table_b ON table_a.GROUP_ID = table_b.ID
JOIN table_b `temp` ON table_a.GROUP_ID = temp.ID
WHERE temp.NAME = 'Scully'
SELECT
`group_name`,
GROUP_CONCAT(a.`name`) AS 'members'
FROM `table_a` a
INNER JOIN `table_b` b
ON a.`group_id` = b.`id`
AND a.`group_id` = (
SELECT `group_id` FROM `table_a` WHERE `name`='Scully'
)
GROUP BY NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.