GBQ - 仅当 SELECT 查询 returns 结果时才执行插入查询
GBQ - Execute INSERT query ONLY if SELECT query returns results
这个问题以前以多种形式被问过。但是 none 提出的解决方案适用于我的情况。
我正在使用 GBQ。
我有这个 table:
Hour Orders
2022-01-12T00:00:00 12
2022-01-12T01:00:00 8
2022-01-12T02:00:00 9
我想创建一个查询以每小时自动将数据插入此table,在这些条件下:
- 如果我要插入的“最近一小时”已经存在,我不想插入两次。
我尝试了以下 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)
虽然通常接受 SQL 语法,但此语法在 GBQ 中返回错误。
有办法吗?
我的首要任务是不重复插入。
我不关心查询中的更新部分。
理想情况下我想要类似的东西(我知道这种语法不存在):
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 的工作方式不同。 IF
这个问题以前以多种形式被问过。但是 none 提出的解决方案适用于我的情况。
我正在使用 GBQ。
我有这个 table:
Hour Orders
2022-01-12T00:00:00 12
2022-01-12T01:00:00 8
2022-01-12T02:00:00 9
我想创建一个查询以每小时自动将数据插入此table,在这些条件下:
- 如果我要插入的“最近一小时”已经存在,我不想插入两次。
我尝试了以下 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)
虽然通常接受 SQL 语法,但此语法在 GBQ 中返回错误。
有办法吗?
我的首要任务是不重复插入。 我不关心查询中的更新部分。
理想情况下我想要类似的东西(我知道这种语法不存在):
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 的工作方式不同。 IF