Sql server T-SQL:其中xxx在临时表中

Sql server T-SQL:其中xxx在临时表中,sql-server,where,in-operator,temp-tables,Sql Server,Where,In Operator,Temp Tables,我有一个临时表,想在where子句中检查临时表中是否包含某个id/字符串 Select... WHERE MyId IN MyTempTable 我在MS SQL Management studio中遇到一个常规错误 In运算符不适用于临时表吗?您的语法错误: SELECT ... FROM MyTable WHERE MyID IN (SELECT MyID FROM MyTempTable) 我不太喜欢IN操作符,所以我更喜欢这样: SELEC

我有一个临时表,想在where子句中检查临时表中是否包含某个id/字符串

Select...
WHERE MyId  IN MyTempTable
我在MS SQL Management studio中遇到一个常规错误

In运算符不适用于临时表吗?

您的语法错误:

SELECT ...
  FROM MyTable
 WHERE MyID IN (SELECT MyID
                  FROM MyTempTable)
我不太喜欢IN操作符,所以我更喜欢这样:

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

但这在很大程度上取决于你的品味。

你的语法有点错误。您需要执行以下操作:

SELECT ...
  FROM ...
 WHERE MyId IN (SELECT MyId 
                  FROM MyTempTable);
中需要特定项目的列表。表通常有多个字段,如何知道您指的是哪个字段


您可以使用一个子查询,其中“从temp中选择任何内容”中的字段是正确的,因为通常情况下,“不在”和“不存在”比较好,这两种情况完全不同。那么为什么使用不一致呢?INTERSECT也能工作。看我的please@gbn:正如我所说,这在很大程度上是一个品味问题,但我的理由更多是基于我对关系模型的理解,而不仅仅是一致性。首先,在这门语言中有一点赘肉,这是完全没有必要的;任何可以用NOT IN表示的东西都不存在等价物。但是,这也是一个语义上的奇怪现象,它既不受关系代数的影响,也不受关系演算的影响。它被SQL的设计者放在那里,原因我无法理解。不过,这肯定是一件大事,因为这显然是SQL Structured.NOT in不等于不存在的原因,因此我发表了评论。不在列表中的NULL将不会给出任何结果。为什么在那里?我猜当ANSI被组合在一起时,它们是从当时的一个SQL中吸收过来的dialects@gbn你是对的,但是我避免像鼠疫暴行那样的零星,如不在A、B、C中,NULL只是许多动机中的一个,所以我不经常在我的思考中考虑这样的情景。另外,我指的不是ANSI SQL,而是产生这些方言的原始设计作品。@Lisa:显而易见的方式。如果你想不出来,就用你试过的代码再问一个问题。