我将如何比较两个表(Table1
和Table2
)并找到Table2
中的所有新条目或更改。
使用SQL Server我可以使用
Select * from Table1
Except
Select * from Table2
这是我想要的样本
表1
A | 1
B | 2
C | 3
表2
A | 1
B | 2
C | 2
D | 4
因此,如果我比较两个表格,我希望我的结果显示以下内容
C | 2
D | 4
我尝试了一些陈述,但没有运气。
现在我有了实际的示例数据集,我可以编写一个查询,在一个表中查找不在另一个表上的每个域:
https://bigquery.cloud.google.com/table/inbound-acolyte-377:demo.1024 有 24,729,816 行。 https://bigquery.cloud.google.com/table/inbound-acolyte-377:demo.1025 有 24,732,640 行。
让我们看看 1025 中不在 1024 中的所有内容:
SELECT a.domain
FROM [inbound-acolyte-377:demo.1025] a
LEFT OUTER JOIN EACH [inbound-acolyte-377:demo.1024] b
ON a.domain = b.domain
WHERE b.domain IS NULL
结果:39,629 行。(8.1 秒已过,已处理 2.04 GB)
要获取差异(假设 tkey 是您的唯一行标识符):
SELECT a.tkey, a.name, b.name
FROM [your.tableold] a
JOIN EACH [your.tablenew] b
ON a.tkey = b.tkey
WHERE a.name != b.name
LIMIT 100
对于新行,一种方法是您提出的方法:
SELECT col1, col2
FROM table2
WHERE col1 NOT IN
(SELECT col1 FROM Table1)
(当 Table1 变得太大时,您必须切换到 JOIN EACH)