Как сделать запрос select и правильно связать таблицы

286
25 декабря 2016, 20:10

Все привет, я туплю и не могу сообразить как сделать следующее. Предположим есть у нас:

  • таблица людей(person) которая состоит из id_person,name,surname. Имеет следующее содержимое:

    (1,"Иван",'Иванов'), (2,"Петро","Петров"), (3,"Петро","Петров");

  • таблица машин(auto) которая состоит из id_auto,name,number. Имеет следующее содержимое:

    (1,"ford",'A101MP'), (2,"nissan","A151AO"), (3,"lada","M199BD"), (4,"mazda",'A333CK'), (5,"ИЖ","H777CO"), (6,"ГАЗ","H888HH");

  • Есть таблица которая содержит набор,человек-машина, ибо у одного человека может быть несколько машин. Назовем таблицу autoPerson, состоит из id, id_person, id_auto; имеет следующее содержимое:

    (1,1,6), (2,2,4), (3,2,5), (4,2,1), (5,3,2), (6,3,3);

Мне нужно сформировать запрос select который выводил бы список пользователь и перечисление машин которые ему принадлежат. Желаемый результат выглядит следующим образом:

(1,"Иван",'Иванов','6'),
(2,"Петро","Петров",'4,5,1'),
(3,"Петро","Петров",'2,3');

Как мне это сделать? У меня было много попыток, вот некоторые из них:

select p.*,SUM(concat(ap.id_auto,',')) from person p inner join autoPerson ap on ap.id_person=p.id_person group by p.id_person; 
select p.*,concat(ap.id_auto,',') from person p inner join autoPerson ap on ap.id_person=p.id_person group by p.id_person; 

Пробовал так же создать хранимую процедуру с курсором, но там результат - происходит несколько ответов, что не комильфо. Я знаю это элементарно и типично и я раньше делал это, но сейчас вылетело из головы. Подскажите пожалуйста.

Answer 1

Это делается с помощью GROUP_CONCAT.

select p.*,GROUP_CONCAT(ap.id_auto) from person p inner join autoPerson ap on ap.id_person=p.id_person group by p.id_person;
READ ALSO
Как сделать копию строки с помощью целочисленной переменной?

Как сделать копию строки с помощью целочисленной переменной?

К примеру, есть строка и целочисленная переменная:

334
Генерация букв на Java

Генерация букв на Java

Как записать генерацию рандомных букв?

951
Реализовать обход foreach для своей коллекции

Реализовать обход foreach для своей коллекции

В учебных целях нужно было самостоятельно реализовать связные списки и сделать так, чтобы был возможен обход через foreachКак я понял, нужно...

426
Как добавить в архив папку, используя Zip4j и OutputStream

Как добавить в архив папку, используя Zip4j и OutputStream

Я пытаюсь добавить в архив папку вот так (в соответствии с документацией):

385