MySQL множественный результат выбора внутри основного выбора? - PullRequest
1 голос
/ 06 декабря 2011

У меня есть отношение n-к-1 в таблицах MySQL.

Дома могут иметь много владельцев.

Я бы хотел перечислить всех владельцев дома.

Я пробовал это:

SELECT id, name, address
   ,(
      SELECT CONCAT(firstname)
      FROM owners
      WHERE houses_id = houses.id
    ) AS 'owner_firstname' 
FROM houses;

но я получаю этот результат

Error Code: 1242
Subquery returns more than 1 row

Я бы хотел получить такой результат

100 | Liberty House | 200, NY Street | me, myself, Iren

Спасибо

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

Чтобы устранить вашу ошибку: у вас был подзапрос для выбора, который вернул несколько владельцев.Запрос должен был вернуть один литерал, в вашем случае, список имен.Вы можете добиться этого в MySQL, используя функцию GROUP_CONCAT () , чтобы объединить имена владельцев для определенного дома:

SELECT h.id, h.name, h.address, GROUP_CONCAT(o.firstname) AS owner_firstname
FROM houses AS h
INNER JOIN owners AS o ON h.id = o.houses_id
GROUP BY h.id, h.name, h.address
1 голос
/ 06 декабря 2011

Я думаю, что вы ищете group_concat:

select id, name, address, 
      (select group_concat(firstname separator ', ') 
             from owners where houses_id = houses.id) as 'owner_firstname' 
from houses;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...