首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Insert into表包含BigQuery中的重复记录

在 Google BigQuery 中插入数据时,如果你想避免插入重复记录,可以使用多种方法来实现这一目标。以下是几种常见的方法:

方法 1: 使用 MERGE 语句

MERGE 语句允许你根据某些条件合并数据,从而避免插入重复记录。假设你有一个目标表 target_table 和一个源表 source_table,并且你希望根据某个唯一键(例如 id)来避免重复记录。

代码语言:javascript
复制
MERGE target_table T
USING source_table S
ON T.id = S.id
WHEN MATCHED THEN
  UPDATE SET T.column1 = S.column1, T.column2 = S.column2
WHEN NOT MATCHED THEN
  INSERT (id, column1, column2) VALUES (S.id, S.column1, S.column2)

方法 2: 使用 INSERTSELECT 语句结合 DISTINCT

如果你只是想插入不重复的记录,可以使用 INSERTSELECT 语句结合 DISTINCT 来实现。

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
SELECT DISTINCT id, column1, column2
FROM source_table

方法 3: 使用 INSERTSELECT 语句结合 EXCEPT

你可以使用 EXCEPT 子句来选择那些在目标表中不存在的记录。

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
SELECT id, column1, column2
FROM source_table
EXCEPT DISTINCT
SELECT id, column1, column2
FROM target_table

方法 4: 使用 INSERTSELECT 语句结合 LEFT JOIN

你可以使用 LEFT JOIN 来选择那些在目标表中不存在的记录。

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
SELECT S.id, S.column1, S.column2
FROM source_table S
LEFT JOIN target_table T
ON S.id = T.id
WHERE T.id IS NULL

示例

假设你有以下两个表:

  • target_table:目标表,包含现有数据。
  • source_table:源表,包含要插入的数据。

创建示例表

代码语言:javascript
复制
CREATE TABLE target_table (
  id INT64,
  column1 STRING,
  column2 STRING
);

CREATE TABLE source_table (
  id INT64,
  column1 STRING,
  column2 STRING
);

插入示例数据

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
VALUES (1, 'A', 'B'), (2, 'C', 'D');

INSERT INTO source_table (id, column1, column2)
VALUES (2, 'C', 'D'), (3, 'E', 'F');

使用 MERGE 语句避免重复记录

代码语言:javascript
复制
MERGE target_table T
USING source_table S
ON T.id = S.id
WHEN MATCHED THEN
  UPDATE SET T.column1 = S.column1, T.column2 = S.column2
WHEN NOT MATCHED THEN
  INSERT (id, column1, column2) VALUES (S.id, S.column1, S.column2);

使用 INSERTSELECT 语句结合 DISTINCT

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
SELECT DISTINCT id, column1, column2
FROM source_table;

使用 INSERTSELECT 语句结合 EXCEPT

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
SELECT id, column1, column2
FROM source_table
EXCEPT DISTINCT
SELECT id, column1, column2
FROM target_table;

使用 INSERTSELECT 语句结合 LEFT JOIN

代码语言:javascript
复制
INSERT INTO target_table (id, column1, column2)
SELECT S.id, S.column1, S.column2
FROM source_table S
LEFT JOIN target_table T
ON S.id = T.id
WHERE T.id IS NULL;
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共50个视频
动力节点-JavaWeb经典项目教程-CRM项目【1】
动力节点Java培训
该系统主要针对企业客户,单方面的对客户做出的一些管理,例如售前、售中、售后;前台包括的模块有:工作台、动态、审批、客户公海、市场活动、线索、客户、联系人、交易、售后回访、统计图表、报表、销售订单、发货单、跟进、产品、报价;后台包括的模块有:个人设置、部门维护、权限管理、数据字典表等
共50个视频
动力节点-JavaWeb经典项目教程-CRM项目【2】
动力节点Java培训
该系统主要针对企业客户,单方面的对客户做出的一些管理,例如售前、售中、售后;前台包括的模块有:工作台、动态、审批、客户公海、市场活动、线索、客户、联系人、交易、售后回访、统计图表、报表、销售订单、发货单、跟进、产品、报价;后台包括的模块有:个人设置、部门维护、权限管理、数据字典表等
共50个视频
动力节点-JavaWeb经典项目教程-CRM项目【3】
动力节点Java培训
该系统主要针对企业客户,单方面的对客户做出的一些管理,例如售前、售中、售后;前台包括的模块有:工作台、动态、审批、客户公海、市场活动、线索、客户、联系人、交易、售后回访、统计图表、报表、销售订单、发货单、跟进、产品、报价;后台包括的模块有:个人设置、部门维护、权限管理、数据字典表等
共32个视频
动力节点-JavaWeb经典项目教程-CRM项目【4】
动力节点Java培训
该系统主要针对企业客户,单方面的对客户做出的一些管理,例如售前、售中、售后;前台包括的模块有:工作台、动态、审批、客户公海、市场活动、线索、客户、联系人、交易、售后回访、统计图表、报表、销售订单、发货单、跟进、产品、报价;后台包括的模块有:个人设置、部门维护、权限管理、数据字典表等
领券