Проверить все записи в подзапросе - PullRequest
0 голосов
/ 14 декабря 2018

говорят, что у меня есть три таблицы:

DealerSellsCar: {[DealerID, CarID]}

Автомобиль: {[CarID, Color]}

Дилер: {[DealerID, Имя]}

Первичными ключами являются CarID, DealerID, CarID и DealerID в качестве внешних ключей.

Теперь: скажем, у меня есть 6 разных идентификаторов carID (1 ... 6) и 3 разных идентификатора DealerID ("1A", "2B", "3C"), из которых только DealerID "3C" продает все автомобили (для 3C есть запись в DealerSellsCar для CarID (1 ... 6)).

Как запросить дилера (-ов), который продает все автомобили (идентификаторы от 1 до 6)?

Я пробовал:

select dsc.DealerID
from DealersellsCar dsc
where dsc.CarID = all (select CarID from Car)

Что не сработало.Я получаю столбец DealerID без записей (когда должна быть запись "3C").Я также все проверил вручную, но безрезультатно.

Поиск в Google и поиск здесь не дали результатов.Прошу прощения, если это дубликат или я неясно.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Попробуйте это

select dsc.DealerID
from DealersellsCar dsc
group by dsc.DealerID 
having count(doc.DealerID) = (select count(c.id) from Car c);
0 голосов
/ 14 декабря 2018

Хорошо, я думаю, что лучше использовать объединение в этом запросе, чтобы объединить все ваши ключи:

select dsc.DealerID
from DealersellsCar dsc
inner join CarID c
on c.CarID = dsc.CarID
inner join Dealer d
on d.DealerID = dsc.DealerID

И это вы можете выполнить без ошибок и вывести DealerID с повторениями, если вам нужен DealerID без повторений,вам нужно использовать различные или группировать по:

select dsc.DealerID
from DealersellsCar dsc
inner join CarID c
on c.CarID = dsc.CarID
inner join Dealer d
on d.DealerID = dsc.DealerID
group by dsc.DealerID

Или:

select distinct dsc.DealerID
from DealersellsCar dsc
inner join CarID c
on c.CarID = dsc.CarID
inner join Dealer d
on d.DealerID = dsc.DealerID

Что вы предпочитаете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...