У меня есть несколько таблиц:Как эффективно объединить 3 таблицы M: N
приложение:
id | name | url_key
===================
1 | Hello World | hello-world
2 | Snake 2 | snake-2
Разработчики:
id | name | url_key
===================
1 | Mr. Robinson | mr-robinson
2 | Richard | richard
3 | Nokia | nokia
приложение-Developers-Присваивающих
app_id | developer_id
=====================
1 | 1
1 | 2
2 | 3
Как вы можете видеть, в одном приложении может быть более одного разработчика.
На самом деле, мне нужно написать запрос PostgreSQL, чтобы выбрать все приложения с полезной информацией о связанных разработчиках. , например. STH так:
Hello World | 1-hello-world | Mr.Robinson<1-mr-robinson> /and 1 more/
Snake 2 | 2-snake-2 | Nokia<3-nokia>
Таким образом, если приложение имеет один разработчик, просто добавьте имя, ключ URL-разработчика и идентификатор приложения, если он имеет больше разработчиков, добавить первый и добавлять информацию о «, сколько там есть разработчики ».
И что самое главное - Мне нужно в конечном итоге отфильтровать результаты (например, не возвращать приложения от определенного разработчика).
Я знаю, что это может быть решен путем записи первого запросом для самых приложений, а затем отправить следующий запрос для каждой строки, но не хороший способ, я думаю ...
Если я просто РЕГИСТРИРУЙТЕСЬ таблицу:
SELECT * FROM apps a
LEFT JOIN apps_developers_assignment ada ON a.id = ada.app_id
LEFT JOIN developers d ON ada.developer_id = d.id
Hello World | 1-hello-world | Mr.Robinson<1-mr-robinson>
Hello World | 1-hello-world | Richard<2-richard>
Snake 2 | 2-snake-2 | Nokia<3-nokia>
Он возвращает дубликаты приложений ... и я не знаю, как фильтровать эти результаты разработчиком (как я написал выше).
Куда вы застряли? С чем вы сталкиваетесь? – Oded
@Oded я изменил вопрос, надеюсь, теперь будет более ясно –