Как выбрать поставщиков, которые продали кусок P1 всем проектам из Лондона? - PullRequest
1 голос
/ 04 июля 2019

У меня есть эти таблицы:

Suppliers S (S#, name-S, Status, City)
PIECES P (P#, name-P, colour, weight, City)
PROJECTS J (J#, name-J, Ciudad)
SELLS SPJ (S#, P#, J#, quantity)

Я хочу найти всех поставщиков, которые продали кусок "p1" всем проектам из Лондона

select PROJECTS.j
from SELLS, Suppliers, PIECES, PROJECTS 
where SELLS.s = Suppliers.s
           and  SELLS .p=PIECES .p
           and  SELLS .j=PROJECTS .j
           and PIECES .p="p1"
           and PROYECTOS.ciudad="London"

Это выбирает поставщиков, которые продают один проект, но не для всех проектов

Данные от продаж:

   supply piece project quantity   
1. s1     p1    j1       5  
2. s1     p1    j3       4  
3. s2     p1    j2       5  
4. s4     p1    j1       1  

j1 иj2 - проекты в Лондоне, S4 продает не все проекты, а получает в результате

1 Ответ

0 голосов
/ 04 июля 2019

Имена столбцов не позволяют даже использовать псевдонимы таблиц, потому что это будет более запутанным.В любом случае, объедините 4 таблицы (правильно), задайте условия в предложении WHERE, сгруппируйте по поставщикам, а окончательное условие в предложении HAVING:

select 
  suppliers.s, suppliers.name
from suppliers
inner join sells on sells.s = suppliers.s
inner join pieces on pieces.p = sells.p
inner join projects on projects.j = sells.j
where pieces.p = 'p1' and projects.cioudad = 'London'
group by suppliers.s, suppliers.name
having count(distinct projects.j) = (select count(*) from projects where cioudad = 'London')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...