SQL Как выбрать «id_owner», который содержит все автомобили из списка - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь получить список «id_owner» из вымышленной таблицы автомобилей и их владельцев (например, «id», «owner_id», «carname»).Этот список владельцев должен содержать все автомобили из другого списка.

он должен выглядеть так: SELECT id_owner FROM ownedcars WHERE carname = "Ferrari" or carname = "Mustang" or carname = "Porsche"

Я думаю, что это необходимо сделать в подзапросе, потому что все способы, которые я пробовал,list возвращает всех идентификаторов id_owners, которые содержат любую машину из этого списка, вместо того, чтобы содержать все три машины из списка

Ответы [ 2 ]

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

Я думаю, что это необходимо сделать в подзапросе, потому что всеми способами, которые я пробовал, список возвращает всех идентификаторов id_owners, которые содержат любую машину из этого списка, а не все три машины списка

На основании приведенного выше сообщения вы можете использовать оператор EXISTS для достижения своей цели.

SELECT id_owner FROM ownedcars T
WHERE EXISTS (SELECT 1 FROM ownedcars WHERE carname='Ferrari' AND id_owner=T.id_owner)
AND EXISTS (SELECT 1 FROM ownedcars WHERE carname='Mustang' AND id_owner=T.id_owner)
AND EXISTS (SELECT 1 FROM ownedcars WHERE carname='Porsche' AND id_owner=T.id_owner)

С наилучшими пожеланиями,

Будет

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

Это можно сделать с group by и having.

SELECT id_owner 
FROM ownedcars 
WHERE carname in ('Ferrari','Mustang','Porsche')
GROUP BY id_owner
HAVING COUNT(DISTINCT carname) = 3
...