2010-12-06 3 views
12

У меня есть временная таблица и вы хотите проверить, где указано, что определенная строка id/содержится в таблице temp.T-SQL: Где временная таблица xxx IN

Select... 
WHERE MyId IN MyTempTable 

Я получаю общую ошибку в студии MS SQL Management.

является оператором «В», не подходящим для временных таблиц?

ответ

19

Ваш синтаксис является неправильным:

SELECT ... 
    FROM MyTable 
WHERE MyID IN (SELECT MyID 
        FROM MyTempTable) 

Я не очень люблю оператора IN, так что я предпочитаю это:

SELECT ... 
    FROM MyTable 
WHERE EXISTS (SELECT * 
       FROM MyTempTable 
       WHERE MyTable.MyID = MyID) 

Но это во многом дело вкуса.

+0

+1 вы правы, потому что в целом это лучше НЕ против НЕ СУЩЕСТВУЕТ, которые совершенно различны. Почему бы не использовать EXISTS последовательно? Также работает INTERSECT. См. Мой [ответ здесь] (http://stackoverflow.com/questions/4249891/combining-datasets-with-except-versus-checking-on-is-null-in-a-left-join/4249958#4249958) пожалуйста – gbn 2010-12-06 20:41:03

3

Ваш синтаксис немного ошибочен. Вам необходимо:

SELECT ... 
    FROM ... 
WHERE MyId IN (SELECT MyId 
        FROM MyTempTable); 
0

in требуется список конкретных товаров. В таблицах обычно имеется более одного поля, как узнать, какое поле вы имеете в виду?

Вы можете использовать подзапрос, where field in (select whatever from #temp)

Смежные вопросы