MySQL количество записей в реляционных таблицах

0

У меня две таблицы: clients и subcontractors. У клиентов много субподрядчиков. Субподрядчики могут иметь много клиентов.

Моя схема выглядит примерно так:

clients
->id
->name
->status

subcontractors
->id
->client_id
->name

Мой вопрос: как я могу рассчитывать клиентов с 1 до 2 субподрядчиков в них?

Благодарю. Я попытался проверить это:

SELECT COUNT между отношениями "один ко многим"

Но кажется, что это противоположность тому, что я пытаюсь подсчитать

  • 0
    Clients has many subcontractors. Subcontractors can have many clients. Почему вы используете отношение один ко многим вместо многих ко многим ?
  • 0
    @Imran Как я использую один ко многим? Можете ли вы уточнить, пожалуйста? Спасибо.
Показать ещё 1 комментарий
Теги:
database

2 ответа

0
Лучший ответ
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;
0

Вы должны использовать отношение многих к большому

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

У клиентов много субподрядчиков. Субподрядчики могут иметь много клиентов.

Поэтому ваши обе таблицы должны быть независимыми, и для взаимодействия вы можете использовать таблицу карт, которая называется отношением 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню