Как сделать выбор в выборе - PullRequest
3 голосов
/ 17 апреля 2009

У меня есть таблица, содержащая поле уникального идентификатора. Другое поле (REF) содержит ссылку на поле идентификатора другого набора данных. Теперь мне нужно выбрать все наборы данных, где REF указывает на набор данных, который не существует.

SELECT * FROM table WHERE ("no dataset with ID=REF exists")

Как я могу это сделать?

Ответы [ 8 ]

21 голосов
/ 17 апреля 2009

3 способа

SELECT * FROM YourTable y WHERE NOT EXISTS 
     (SELECT * FROM OtherTable o WHERE y.Ref = o.Ref)

SELECT * FROM YourTable WHERE Ref NOT IN 
     (SELECT Ref FROM OtherTable WHERE Ref IS NOT NULL)

SELECT y.* FROM YourTable y 
LEFT OUTER JOIN  OtherTable o ON y.Ref = o.Ref
WHERE o.Ref IS NULL

См. Также Пять способов вернуть все строки из одной таблицы, которых нет в другой таблице

6 голосов
/ 17 апреля 2009

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

SELECT * FROM TABLE WHERE NOT EXISTS 
     (SELECT * FROM OtherTable WHERE TABLE.Ref = OtherTable.ID)
5 голосов
/ 17 апреля 2009

Я думаю, что это должно работать

SELECT * FROM table WHERE id NOT IN (SELECT ref_id FROM ref_table)

или с JOIN

SELECT table.* 
FROM table LEFT JOIN ref_table ON table.id = ref_table.ref_id
WHERE ref_table.ref_id IS NULL
4 голосов
/ 17 апреля 2009
SELECT 
 table1.* 
FROM 
 table1
 LEFT JOIN table2 ON table1.id = table2.ref
WHERE 
 table2.ref IS NULL
3 голосов
/ 17 апреля 2009

Вы можете сделать такой подзапрос, как:

select * from table where somefield not in (select otherfield from sometable where ID=REF)
1 голос
/ 17 апреля 2009

Примерно так:

SELECT * FROM table WHERE ID NOT IN(SELECT REF FROM Table2 )
1 голос
/ 17 апреля 2009
SELECT * 
FROM table 
WHERE ((SELECT COUNT(*) FROM table2 WHERE table2.id = table.ref) = 0)
0 голосов
/ 18 декабря 2014

Да, вы можете использовать

выберите * из х, где не существует (выберите * из у)

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