对于每个目标行,BigQuery-UPDATE中的SQL最多只能匹配一个源行

我正在try 使用表B中具有相同列名的数据将数据写入到表A中的"垂直"列,这是基于表A中的"查询"列和表B中的"关键字"列之间的匹配.问题是:TableA有多个行具有相同的匹配项(示例数据如下所示).

我收到的错误消息是

对于每个目标行,更新/合并最多只能匹配一个源行

这是我目前正在运行的查询:

UPDATE `tableA` AS tA
SET tA.vertical = tB.vertical
FROM `tableB` AS tB
WHERE tA.query = tB.keyword;

这些是表A和表B的样本.

tableA

query unique_key vertical
abc 123456 null
abc 789abc null
abc defghi null
def 5l5p5p null
def qwertz null
def m43222 null

tableB

keyword vertical
abc planet
def earth

这就是我在运行查询后期望的TableA:

Updated tableA

query unique_key vertical
abc 123456 planet
abc 789abc planet
abc defghi planet
def 5l5p5p earth
def qwertz earth
def m43222 earth

任何支持都是非常感谢的.

推荐答案

该错误发生when the relationship between the two tables is 1:n次,即"tA.query"与多个"tB.keyword"匹配.为了解决这个问题,您需要将关系限制为1:1,

  • 或者 Select B桌的DISTINCT对情侣
UPDATE `tableA` AS tA
SET tA.vertical = tB.vertical
FROM (SELECT DISTINCT vertical, query FROM `tableB`) AS tB
WHERE tA.query = tB.keyword;
  • 或者 Select 关键字的MIN/MAX,假设这样的操作对您的输出是正确的
UPDATE `tableA` AS tA
SET tA.vertical = tB.vertical
FROM (SELECT vertical, MIN(query) FROM `tableB` GROUP BY vertical) AS tB
WHERE tA.query = tB.keyword;

Sql相关问答推荐

调用存储过程时SQL服务器TDS协议响应问题

PG SQL中按条件聚合值

SQL(PostgreSQL)从条件创建点表

从列的不同值创建列

编写一个SQL查询来返回收视率较高的类型,并取这些收视率的平均值,我该如何做呢?

如何计算一个用户S的日常连胜?

将计算列设置为持久化的目的是什么?

按连续相等值分组排序

将两列相加为同一表中的行的查询

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

不同计数的 Postgres PIVOT 表

YEAR 函数仍然不可SARGable 吗?

Spark / Hive:如何获取列中正值的百分比?

如何在 SQL 中将两行(或多行)jsonb 数组合并为一行

Oracle PL/SQL长期运行问题

在Snowflake中如何使用SQL对版本字符串进行排序?

将单行中的多个行值转换为列

从 JSON 数组中移除对象

REGEXP 用于字符串格式化以对用空格分隔的字符和数字进行分组

如何刷新在视图之上创建的表