如何使用外部应用仅来自一个 table 的 select 数据?

How do I select data only from one table using outer apply?

我想 select 只在 table A 中存在的数据不包括在 table B 中存在的数据。左连接需要很多时间,所以,考虑做它与外部应用而不是左连接。但是我没有得到想要的输出。为什么 NULL 条件在外部应用中不起作用?并且这两个 table 中的每一个至少有一百万条记录并且 table A 在到达这一点之前与一个大的 table 连接在一起。注意:与下面的示例不同,table A 有很多列(id、name、city、dob)而 table B 有两列。

Table一个

id name
1 a
2 b
3 c
4 d
5 e
6 f

Table B

id name
3 c
4 d

预期结果

id name
1 a
2 b
5 e
6 f

部分代码:

select from #t1  
DECLARE @t1 TABLE (id int, name varchar(10))  
INSERT INTO @t1 SELECT 3,'c'  INSERT INTO @t1 select 4,'d' 
select #t1.* from #t1  
OUTER APPLY (SELECT * FROM @t1 WHERE #t1.id =
 [@t1].id  AND [@t1].id IS NULL)t

您可以尝试使用 operator EXCEPT。它 returns 来自第一个数据集 (A) 的所有不同记录,并从该结果中删除从第二个数据集 (B) 返回的记录。

SELECT id,name FROM A
EXCEPT
SELECT id,name FROM B

如果每个 table 的列数不同,您可以尝试 NOT EXISTS:

SELECT * FROM A
WHERE NOT EXISTS
(SELECT 1 FROM B WHERE B.id=A.id)

您也可以尝试使用 NOT IN,如下所示。在两个 table 中对列 ID 进行索引将使事情变得更快。

SELECT * FROM Table_A 
WHERE Table_A.id NOT IN (SELECT ID FROM Table_B)