Join 在Bigquery中,我可以使用包含/不包含通配符连接两个表吗?
我试图连接两个表,其中第一个表中的值需要包含在第二个表的一个字段中的值中,但不包含在另一个字段中的值中。所有字段都是非数组字符串 例如,我有一个表1,我想在表1.field1位于表2.field1是但不在表2.field1否的条件下加入表2 表1中的行应与表2中的行连接,如下所示:Join 在Bigquery中,我可以使用包含/不包含通配符连接两个表吗?,join,google-bigquery,wildcard,contains,Join,Google Bigquery,Wildcard,Contains,我试图连接两个表,其中第一个表中的值需要包含在第二个表的一个字段中的值中,但不包含在另一个字段中的值中。所有字段都是非数组字符串 例如,我有一个表1,我想在表1.field1位于表2.field1是但不在表2.field1否的条件下加入表2 表1中的行应与表2中的行连接,如下所示: 表1.1字段1='123100' 表2.FIELD1是='\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu200' 表2.2字段2否=空 表1.1字段1='321300' 表2.1字段1
- 表1.1字段1='123100'
- 表2.FIELD1是='\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu200'
- 表2.2字段2否=空
- 表1.1字段1='321300'
- 表2.1字段1是=%
- 表2.field1no='\uuuuuuuuuuuuuuuuuuuuuuuuuuu200'
WITH
table1 AS (SELECT '123100' field1 UNION ALL
SELECT '321300'),
table2 AS (SELECT 'data1' data, 'r\'^([\\d]+100|[\\d]+200)$\'' field1yes, '' field1no UNION ALL
SELECT 'data2', 'r\'^([0-9A-Za-z])$\'', 'r\'^([\\d]+100|[\\d]+200)$\'')
SELECT
*
FROM table1
JOIN table2
ON 0=0
AND REGEXP_CONTAINS(table1.field1, table2.field1yes)
AND NOT REGEXP_CONTAINS(table1.field1, table2.field1no)
但它不返回任何结果,即使以下内容确实会按预期返回表1中的第一行结果:
SELECT
*
FROM table1
WHERE 0=0
AND REGEXP_CONTAINS(table1.field1, r'^([\d]+100|[\d]+200)$')
下面返回表1中的第二行:
SELECT
*
FROM table1
WHERE 0=0
AND NOT REGEXP_CONTAINS(table1.field1, r'^([\d]+100|[\d]+200)$')
这是正确的方法吗?如果是这样,我需要对查询进行哪些调整才能返回结果?如果没有,是否有不同的解决方案来匹配这两个表?下面是针对BigQuery标准SQL的 这是正确的方法吗 是的,您可以预设regexp,然后在regexp函数中使用它 我需要对查询进行哪些调整才能返回结果 我希望下面能够很清楚地说明您最初的查询中的“错误”是什么。我的主要意思是在表2的TCE中(具体地说,字段1是和字段1否)
注意:我重点解决了初始查询的主要问题,它是regexp表达式的表示形式,并假设其余部分(连接逻辑等)由您来调整,这似乎完成了我的查询的技巧--谢谢!非常感谢。
#standardSQL
WITH table1 AS (
SELECT '123100' field1 UNION ALL
SELECT '321300'
), table2 AS (
SELECT 'data1' data, r'^([\d]+100|[\d]+200)$' field1yes, '' field1no UNION ALL
SELECT 'data2', r'^([0-9A-Za-z])$', r'^([\d]+100|[\d]+200)$'
)
SELECT *
FROM table1
JOIN table2
ON REGEXP_CONTAINS(table1.field1, table2.field1yes)
OR NOT REGEXP_CONTAINS(table1.field1, table2.field1no)