我使用了搜索功能,这使我得到了以下解决方案。
起点如下:我有一个存储所有数据的表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]))
答案 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