У меня две таблицы: clients
и subcontractors
. У клиентов много субподрядчиков. Субподрядчики могут иметь много клиентов.
Моя схема выглядит примерно так:
clients
->id
->name
->status
subcontractors
->id
->client_id
->name
Мой вопрос: как я могу рассчитывать клиентов с 1 до 2 субподрядчиков в них?
Благодарю. Я попытался проверить это:
SELECT COUNT между отношениями "один ко многим"
Но кажется, что это противоположность тому, что я пытаюсь подсчитать
select count(*) count from (
select c.id from clients c
inner join subcontractors sc on sc.client_id=c.id
group by c.id
having count(*) in (1, 2)
) sub;
Вы должны использовать отношение многих к большому
Я ответил, потому что вы хотите узнать от меня, почему вы должны использовать много-много отношений вместо одного для многих. Потому что ты сказал
У клиентов много субподрядчиков. Субподрядчики могут иметь много клиентов.
Поэтому ваши обе таблицы должны быть независимыми, и для взаимодействия вы можете использовать таблицу карт, которая называется отношением many to many
. В противном случае запрос будет более сложным, и вам потребуется больше вложенных подзапросов по простой причине.
Я изменил вашу структуру
clients
-> id
-> name
-> status
subcontractors
-> id
-> name
client_subcontractors (this is your many to many relation)
-> id
-> client_id
-> subcontractor_id
SELECT COUNT('client_id') AS total_client
FROM 'client_subcontractors'
WHERE 'subcontractor_id' IN (1, 2)
GROUP BY 'client_id'
HAVING COUNT(*) = 2;
Проверьте SQL FIDDLE DEMO
Clients has many subcontractors. Subcontractors can have many clients.
Почему вы используете отношение один ко многим вместо многих ко многим ?