如何使用BigQuery遗留sql为多个值查询相同的重复字符串字段?

如何使用BigQuery遗留sql为多个值查询相同的重复字符串字段?,sql,google-bigquery,legacy-sql,Sql,Google Bigquery,Legacy Sql,我有一个结构为t1的表: id:整数 名称:重复(字符串) 我有多个名称的条目: 123;名字1,名字2 124;名字1,名字3,名字4,名字5 125;名字1,名字4,名字7 我想返回具有nameequalname1和name4的行(唯一),它们将返回第2行和第3行,id 124和125 Bigquery自动使结果变平。但这使得返回包含多行的行变得很困难 由于一些限制,必须使用LegacySQL来实现这一点。我试过: 选择_id作为_id,GROUP_CONCAT_UNQUOTED(n

我有一个结构为t1的表:

  • id:整数
  • 名称:重复(字符串)
我有多个名称的条目:

  • 123;名字1,名字2
  • 124;名字1,名字3,名字4,名字5
  • 125;名字1,名字4,名字7
我想返回具有nameequalname1name4的行(唯一),它们将返回第2行和第3行,id 124和125

Bigquery自动使结果变平。但这使得返回包含多行的行变得很困难

由于一些限制,必须使用LegacySQL来实现这一点。我试过:

选择_id作为_id,GROUP_CONCAT_UNQUOTED(name)作为name,其中name 类似于“%name1%”和类似于“%name4%”的名称

也试过了,但不起作用

此外,由于名称1,此函数返回所有行:

中的名称(“名称1”、“名称4”)

(name=“name1”或name=“name4”)

由于某些限制,必须使用LegacySQL执行此操作

下面是BigQuery遗留SQL的示例

选项1

并将没有展平结果的目标表设置为false(在UI中未选中)

选项2

结果(假设表中有您问题中的采样数据)

注意:以上选项假设名称数组中没有重复的名称,这很可能是您的情况

选项#3-这实际上适用于BigQuery标准SQL-假设您可以将您的内容迁移到标准SQL

#standardSQL
SELECT id, name
FROM `project.dataset.table`
WHERE 2 = (SELECT COUNT(DISTINCT item) FROM UNNEST(name) item WHERE item IN ('name1','name4'))
结果

Row id  name     
1   124 name1    
        name3    
        name4    
        name5    
2   125 name1    
        name4    
        name7    
Row id  name     
1   124 name1,name3,name4,name5  
2   125 name1,name4,name7    
#standardSQL
SELECT id, name
FROM `project.dataset.table`
WHERE 2 = (SELECT COUNT(DISTINCT item) FROM UNNEST(name) item WHERE item IN ('name1','name4'))
Row id  name     
1   124 name1    
        name3    
        name4    
        name5    
2   125 name1    
        name4    
        name7