SQL Server - 从其他表中排除记录

时间:2018-01-23 16:00:20

标签: sql sql-server

我使用了搜索功能,这使我得到了以下解决方案。

起点如下:我有一个存储所有数据的表A. 从该表中我选择了一定数量的记录并将其存储在表B中。

在一个新语句中,我想从表A中选择未出现在表B中的新记录,并将它们存储在表c中。我尝试用AND ... NOT IN语句来解决这个问题。 但我仍然在表C中收到表B中的记录。

重要提示:我只能使用select语句,每个语句也需要以select开头。 有没有人知道以下陈述中的问题可能是:

Select *
From
(Select TOP 10000 * 
FROM [table_A]
WHERE Email like '%@domain_A%' 
AND Id NOT IN (SELECT Id
FROM [table_B])) 
Union
(Select TOP 7500 * 
FROM table_A] 
WHERE Email like '%@domain_B%'
AND Id NOT IN (SELECT Id
FROM [table_B]))
Union
(SELECT TOP 5000 * 
FROM [table_A] 
WHERE Email like '%@domain_C%'  
AND Id NOT IN (SELECT Id
FROM [table_B]))

3 个答案:

答案 0 :(得分:2)

尝试使用NOT EXISTS代替NOT IN

SELECT
*
FROM TableA A
  WHERE NOT EXISTS
  (
     SELECT 1 FROM TableB WHERE Id = A.Id
  )

答案 1 :(得分:0)

所以基本上这里的想法是从表A中选择表B中不存在的所有内容并将所有内容插入表C中?

    INSERT INTO Table_C 
    SELECT a.colum1, a.column2,......
    FROM [table_A]
    LEFT JOIN [table_B] ON a.id = b.ID
    WHERE a.Email like '%@domain_A%' AND b.id IS NULL

答案 2 :(得分:0)

谢谢大家的反馈,我从中学到了很多。 我能够在你的帮助下解决这个问题。以上是现在正在发挥预期结果的陈述:



Select Id
From
(Select TOP 10000 * FROM Table_A
WHERE Email like '%@domain_a%'
AND Id NOT IN (SELECT Id
FROM Table_B)
order by No desc) t1
Union
Select Id
From
(Select TOP 7500 * FROM Table_A
WHERE Email like '%@domain_b%'
AND Id NOT IN (SELECT Id
FROM Table_B)
order by No desc) t2
Union
Select Id
From
(SELECT TOP 5000 * FROM Table_A
WHERE Email like '%@domain_c%'  
AND Id NOT IN (SELECT Id
FROM Table_B)
order by No desc) t3