我正在尝试在大查询中加入两个表, Table1包含一个ID列,Table2包含一个具有相同ID或多个ID的列,以逗号分隔的长字符串形式,如" id123,id456,id678"
如果Table1.ID = Table2.ID,我可以将这些表连接在一起,但这会忽略Table1.ID是Table2.ID中多个ID之一的所有行。 我看过类似的帖子,告诉我使用像
这样的通配符on concat('%',Table1.ID,'%') = Table2.ID
但这不起作用,因为它似乎创建了一个包含'%'的字符串。字符并没有实际使用它作为通配符。
我在BigQuery中使用标准sql,任何帮助都将不胜感激
答案 0 :(得分:2)
下面的示例适用于BigQuery Standard SQL
#standardSQL
WITH `project.dataset.table1` AS (
SELECT 123 id, 'a' test UNION ALL
SELECT 456, 'b' UNION ALL
SELECT 678, 'c'
), `project.dataset.table2` AS (
SELECT 'id123,id456' id UNION ALL
SELECT 'id678'
)
SELECT t2.id, test
FROM `project.dataset.table2` t2, UNNEST(SPLIT(id)) id2
JOIN `project.dataset.table1` t1
ON CONCAT('id', CAST(t1.id AS STRING)) = id2
结果如下
Row id test
1 id123,id456 a
2 id123,id456 b
3 id678 c
答案 1 :(得分:0)
表格中的值以百分号开头和结尾是值得怀疑的。 =
无法识别通配符; like
确实:
on Table2.ID like concat('%', Table1.ID, '%')
作为警告。这种结构通常是性能杀手。您最好尝试让Table1
和Table2
中的列完全匹配。