簡體   English   中英

如何進行查詢-GROUP_CONCAT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM