Получить детали, которые сгенерированы всеми поставщиками - PullRequest
0 голосов
/ 18 апреля 2019

Таблица запчастей

pid
____
10
20
30

Таблица поставщиков

sid
____
1
2
3

Таблица катаглогов

cid|pid|sid
___________
1  | 10  | 1
2  | 10  | 2
3  | 10  | 3
4  | 20  | 1
5  | 20  | 2

Я хочу получить детали, которые сгенерированы всеми поставщиками

Я хочу результат 10 для этого образца ...

Я пишу этот запрос ( demo )

select p.pid,count(c.pid) from  p join  c on(c.pid=p.pid)
group by c.pid
having count(c.pid) = (select count(1) from s)

Вопрос: есть лучший способ получить детали, которые производятся всеми поставщиками.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Если вам просто нужны идентификаторы продуктов (pid), вам не нужно присоединяться. Вы можете сделать это просто на столе в каталоге:

   SELECT pid 
     FROM c 
 GROUP BY pid
   HAVING count(DISTINCT sid) = (SELECT count(DISTINCT sid) FROM s)
1 голос
/ 18 апреля 2019

Одним из улучшений может быть обработка c.sid дубликатов:

having count(distinct c.sid) = (select count(1) from s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...