Sql server 内部查询替换了,但不存在

Sql server 内部查询替换了,但不存在,sql-server,tsql,join,Sql Server,Tsql,Join,我试图运行一个复杂的代码,大约有10个,但条件不存在。我可以用内连接替换吗 -----Initial Query--------- Select a FROM A1 WHERE NOT EXISTS (select 1 from B1 WHERE A1.a = B1.a) AND NOT EXISTS (select 1 from C1 WHERE A1.a = C1.a) AND NOT EXISTS (select 1 from D1 WHERE A1.a = D1.a) AND NOT

我试图运行一个复杂的代码,大约有10个,但条件不存在。我可以用内连接替换吗

-----Initial Query---------

Select a FROM A1 WHERE 
NOT EXISTS (select 1 from B1 WHERE A1.a = B1.a)
AND NOT EXISTS (select 1 from C1 WHERE A1.a = C1.a)
AND NOT EXISTS (select 1 from D1 WHERE A1.a = D1.a)
AND NOT EXISTS (select 1 from E1 WHERE A1.a = E1.a)
AND NOT EXISTS (select 1 from F1 WHERE A1.a = F1.a)
AND NOT EXISTS (select 1 from G1 WHERE A1.a = G1.a)
AND NOT EXISTS (select 1 from H1 WHERE A1.a = H1.a)
AND NOT EXISTS (select 1 from I1 WHERE A1.a = I1.a)

----Processed Query-------

SELECT a FROM A1 WHERE a NOT IN (
Select a FROM A1 a1 WHERE 
INNER JOIN B1 b1 WHERE a1.a = b1.a)
INNER JOIN C1 c1 WHERE a1.a = c1.a)
INNER JOIN D1 d1 WHERE a1.a = d1.a)
INNER JOIN E1 e1 WHERE a1.a = e1.a)
INNER JOIN F1 f1 WHERE a1.a = f1.a)
INNER JOIN G1 g1 WHERE a1.a = g1.a)
INNER JOIN H1 h1 WHERE a1.a = h1.a)
INNER JOIN I1 i1 WHERE a1.a = i1.a))
谢谢..

否定内部联接不是您想要的

您可以将其作为左连接写入,然后在where子句中过滤掉空值

通过按现有方式编写,您将强制SQL Server读取并连接内存中的所有表,可能会溢出到磁盘,以便构建工作表


一旦编译为执行计划,左连接可能会导致相同的左反半连接操作。但是,如果您的要求是在逻辑上排除行,则not exists是更可取且性能更高的方法。

正如@sTTu所述,该语法不起作用

不过,还有另一种有效的语法:

在此处选择一个或多个其他列 来自A1 不存在的地方 从此处选择A1.a-注释编号 横断 从B1中选择一个选项 横断 从C1中选择一个选项 横断 从D1中选择一个选项 横断 从E1中选择一个 横断 从F1中选择一个选项 横断 从G1中选择一个 横断 从H1中选择一个选项 横断 从I1中选择一个选项
通过将“不存在”切换为“存在”,并将“相交”切换为“除”

可能更大的问题在于您的模式。设计拙劣的模式将需要笨拙且低效的代码。@SMor这只是我实际查询的一个例子……我只是使用了不同的列名。