Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:为什么此删除查询不起作用?_Sql_Sql Server 2008 R2 - Fatal编程技术网

SQL Server:为什么此删除查询不起作用?

SQL Server:为什么此删除查询不起作用?,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有两个表FinalList和RemoveTheseIDsList。它们都有相同的主键ID。我想从FinalList中删除RemoveTheseIDsList中的所有行。所以,我写了第一个查询: Delete from FinalList Where FinalList.ID not in (Select ID from RemoveTheseIDsList) 理论上,该查询应该删除FinalList中的每一行。相反,它删除了0。我最终决定采用这种笨重的解决方法(确实有效): 我的问题

我有两个表
FinalList
RemoveTheseIDsList
。它们都有相同的主键
ID
。我想从
FinalList
中删除
RemoveTheseIDsList
中的所有行。所以,我写了第一个查询:

Delete from FinalList
    Where FinalList.ID not in (Select ID from RemoveTheseIDsList)
理论上,该查询应该删除
FinalList
中的每一行。相反,它删除了0。我最终决定采用这种笨重的解决方法(确实有效):

我的问题是:为什么第一个查询不起作用?是否有一种快速修复方法可以使此查询保持功能性和小型化?

正如您所说:“我想从FinalList中删除位于RemoveTheseIDsList中的所有记录”

因此,它应该是:

Delete from FinalList
Where FinalList.ID IN (Select ID from RemoveTheseIDsList)
但您的更新就像一个不在,所以请尝试以下方法:

Delete from FinalList
Where FinalList.ID NOT IN (Select RemoveTheseIDsList.ID from RemoveTheseIDsList)
正如您所说:“我想从FinalList中删除RemoveTheseIDsList中的所有记录”

因此,它应该是:

Delete from FinalList
Where FinalList.ID IN (Select ID from RemoveTheseIDsList)
但您的更新就像一个不在,所以请尝试以下方法:

Delete from FinalList
Where FinalList.ID NOT IN (Select RemoveTheseIDsList.ID from RemoveTheseIDsList)

您是否确定
ID
实际上是
RemoveTheseIDsList
的主键?我怀疑它是可空的,并且至少包含一个
NULL
——或者
RemoveTheseIDsList
根本不包含名为
ID
的列,并且子查询引用了外部查询中的
ID
列。您遇到了什么错误?第一个查询不应该读取
ID IN()
,而不是
ID not IN()
?@MichaelHaren-左侧外部连接查询正在进行一个反半连接,尽管有描述,但我猜想他们确实希望
不在
语义中。您是否肯定
ID
实际上是
删除seidslist
的主键?我怀疑它是可空的,并且至少包含一个
NULL
——或者
RemoveTheseIDsList
根本不包含名为
ID
的列,并且子查询引用了外部查询中的
ID
列。您遇到了什么错误?第一个查询不应该在()
中读取
ID,而不是
ID不在()
?@MichaelHaren-左侧外部连接查询正在进行反半连接,尽管有描述,但我猜想他们确实希望
不在
语义中。可以重写为连接,取决于您喜欢的
从FinalList fl内部连接DELETE fl RemoveTheseIDsList rtl ON fl.ID=rtl.ID
我会在
子查询
NOT in
中添加一个
,RemoveTheseIDsList.ID不为空,以确保这是我的主要怀疑。如果他在FinalList中得到空值,如果他进行更新,我认为left join将为null,这就是它删除RemoveTheseIDsList表中所有记录的原因。所以我的答案中的第一个删除应该是正确的。@GregM-不,在
RemoveTheseIDsList.ID
中出现
NULL
不会影响左连接,但是(x,y,NULL)
中不出现的任何
都不会返回任何结果。是的,但我说的是finallist中出现NULL将被重写为连接,取决于您喜欢的
从FinalList fl内部连接DELETE fl RemoveTheseIDsList rtl ON fl.ID=rtl.ID
我会在
子查询
NOT in
中添加一个
,RemoveTheseIDsList.ID不为空,以确保这是我的主要怀疑。如果他在FinalList中得到空值,如果他进行更新,我认为left join将为null,这就是它删除RemoveTheseIDsList表中所有记录的原因。所以我的答案中的第一个删除应该是正确的。@GregM-不,在
RemoveTheseIDsList.ID
中出现
NULL
不会影响左连接,但是(x,y,NULL)
中没有的任何
都不会返回任何结果。是的,但我说的是在FinalList中出现NULL