Какие из этих значений нет в таблице? - PullRequest
2 голосов
/ 11 февраля 2010

У меня есть список значений, и я хочу знать, какие из них еще не существуют в таблице. (Это на sql server 2000)

Обратите внимание на следующее:

CREATE TABLE myTable ( foo VARCHAR(10) )
GO

INSERT INTO myTable
        ( foo
        )
        SELECT 'aaa'
        UNION ALL SELECT 'bbb'
        UNION ALL SELECT 'ccc'
GO

SELECT foo
    FROM myTable
    WHERE foo IN ( 'aaa', 'cat', 'bbb', 'dog' ) 
-- returns 'aaa' and 'bbb'

Мне нужно написать запрос, который возвращает 'cat' и 'dog'.

SELECT foo
    FROM myTable
    WHERE foo ????? ( 'aaa', 'cat', 'bbb', 'dog' ) 
-- returns 'cat' and 'dog'

Есть ли простой способ сделать это в запросе?

Из-за того, как приложение взаимодействует с базой данных, я бы, например, не стал создавать временную таблицу

Ответы [ 2 ]

6 голосов
/ 11 февраля 2010

Вы можете создать таблицу с union all и объединить ее, отфильтровав строки, которые не соответствуют объединению:

SELECT     myList.foo
FROM       (
               SELECT 'aaa' as foo
               UNION ALL SELECT 'cat'
               UNION ALL SELECT 'bbb'
               UNION ALL SELECT 'dog'
           ) myList
LEFT JOIN  myTable
ON         myTable.foo = myList.foo
WHERE      myTable.foo is null
0 голосов
/ 11 февраля 2010

СУЩЕСТВУЕТ - это вещь (НЕ СУЩЕСТВУЕТ, фактически)

select foo from myTable
WHERE NOT EXISTS (select 1 from myTable where foo in('cat', 'dog'));

Не самый чистый и не самый чистый путь. Так что это может сработать.

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