GBQ-仅当SELECT查询返回结果时才执行INSERT查询



这个问题以前以多种形式被问过。但提出的解决方案都不适用于我的情况。

我正在使用GBQ。

我有这张桌子:

Hour            Orders
2022-01-12T00:00:00       12
2022-01-12T01:00:00       8
2022-01-12T02:00:00       9

我想创建一个查询,在以下条件下每小时自动将数据插入该表

  • 如果";最近一小时";我想插入的已经存在,我不想插入两次

我尝试了以下SQL查询:

IF EXISTS (SELECT 1 FROM `Table` WHERE Hour = var_most_recent_hour) 
UPDATE `Table` SET Orders = var_most_recent_orders WHERE Hour = var_most_recent_hour
ELSE 
INSERT INTO `Table` (Hour, Orders) VALUES (var_most_recent_hour, var_most_recent_orders)

此语法在GBQ中返回一个错误,尽管通常接受SQL语法。

有办法做到这一点吗?

我的首要任务是插入而不重复我不关心查询中的UPDATE部分。

理想情况下,我想要这样的东西(我知道这种语法不存在(:

IF NOT EXISTS (SELECT 1 FROM `Table` WHERE Hour = var_most_recent_hour) 
INSERT INTO `Table` (Hour, Orders) VALUES (var_most_recent_hour, var_most_recent_orders)

谢谢

尝试下面的示例代码

declare  most_rcnt_hour time;
INSERT INTO dataset.targettable(...
SELECT *
FROM dataset.targettable T
JOIN (SELECT most_rcnt_hour AS most_rcnt_hour) as S
ON T.rcnt_hour <> S.most_rcnt_hour

请注意,BQ中的IF工作方式不同。如果

最新更新