【问题标题】:Bigquery: Update column based on condition set in another tableBigquery:根据另一个表中设置的条件更新列
【发布时间】:2022-12-12 09:31:45
【问题描述】:

我有两个表 t1 和 t2。我需要加入它们并在 t2.inact = ''(为空)和 t2.objval = 1000 时将 t1 中的阻塞列值设置为 'X'。这两个表都由 obid 连接。

表 t1:

obid blocked
1
2

表 t2:

obid inact objval
1 1000
2 2000

预期输出:表 t1 现在应该如下所示

obid blocked
1 X
2

在 bigquery 中,据说不可能将 WITH CTE 与更新语句一起使用,这是我的第一次尝试。其他可能的方法是什么?下面是我对 CASE 的另一个 SQL 尝试,这是创建一个名为 blocked 的新列...但要求是在已存在的列中填充数据 blocked。

WITH abc AS(
SELECT obid,blocked
FROM table1),
def AS (
SELECT obid,inact,objval,
FROM table2
WHERE objval = '1000')

SELECT CASE WHEN t2.inact = '' THEN 'X'
        ELSE '' END as blocked
        FROM abc t1
JOIN def t2
ON t2.obid = t1.obid

任何帮助表示赞赏!

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您仍然可以在“t1" 表,同时检查 "t2" 表,从而模拟 " 之间的连接t1“ 和 ”t2”。

    UPDATE t1
    SET blocked = 'X'
    FROM t2
    WHERE t1.obid = t2.obid AND t2.objval = 1000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2023-03-25
      • 2022-11-10
      • 2017-07-24
      • 2011-11-25
      相关资源
      最近更新 更多