Несколько строк в один столбец - PullRequest
1 голос
/ 24 сентября 2019
table    A        B
column  key      name
         1       John
         1       Michael
         2       Alice
         2       Josh

В моей базе данных, когда я делаю этот запрос:

SELECT A.key, GROUP_CONCAT(B.name SEPARATOR ', ') 
  FROM A 
  LEFT JOIN B ON A.key = B.key 
 WHERE B.name = 'John'
 GROUP BY A.key

Мой вывод :

  key      name
  1        John

Ожидаемый результат:

  key      name
  1        John, Michael

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

Вот ваш запрос

select A.`key`, GROUP_CONCAT(B.'name' SEPARATOR ', ') 
from (select `key` from tblB where n='John' limit 1) as A 
inner join tblB B on B.`key` = A.`key`
group by A.`key`
1 голос
/ 24 сентября 2019

Если вам нужен результат, содержащий имя John, то можно использовать следующий запрос с ключевым словом exists:

SELECT A.key, GROUP_CONCAT(B.name ORDER BY B.name SEPARATOR ', ') as "Names"
  FROM A 
  LEFT JOIN B ON A.key = B.key 
 WHERE EXISTS ( SELECT 1 FROM B WHERE name = 'John' AND B.key = A.key )
 GROUP BY A.key;

Демо

1 голос
/ 24 сентября 2019

Вы можете добавить к вашему запросу предложение HAVING, которое утверждает, что данный набор key записей содержит имя John:

SELECT
    a.`key`,
    GROUP_CONCAT(b.name) names
FROM A a
LEFT JOIN B b
    ON a.`key` = b.`key`
GROUP BY
    a.`key`
HAVING
    SUM(b.name = 'John') > 0;

Примечание: key является зарезервированным MySQLключевое слово, и вы не должны использовать его для именования ваших столбцов (хотя, возможно, вы привели его только в качестве примера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...