首页 > 解决方案 > 您如何确定 A 列是否包含 B 列中的某些内容?

问题描述

与表 B 列 A 相比,我一直试图找出一种从表 A 列 A 中获取信息的方法,例如:

TableA
Name
abcd_1234_efgh
zxcdde_gets_3214_
jkil_uelso_5555_aseil
uuuu_kkkk_iiii_3333

TableB
ID    
1234          
3214           
5555      
3333

我已经尝试从表 A 到表 B 进行 INNER JOIN,然后执行 WHERE TableA.A LIKE TableB.B,但我认为我缺少一个部分来使其工作。

SELECT
    a.Name,
    b.ID
FROM
    TableA a

INNER JOIN
    TableB b
ON
    a.Name LIKE CAST(b.ID AS STRING)

我想要的结果是:

Name                      ID
abcd_1234_efgh            1234
zxcdde_gets_3214_         3214
jkil_uelso_5555_aseil     5555
uuuu_kkkk_iiii_3333       3333

但目前我没有得到任何结果。我相信我遗漏了一些东西,或者可能正在考虑错误的方法来获得所需的结果。任何帮助将不胜感激!

-Maykid

标签: sqlgoogle-bigquery

解决方案


你很亲密。我认为这将在 BigQuery 中起作用:

SELECT a.Name, b.ID
FROM TableA a INNER JOIN
     TableB b
     ON a.Name LIKE CONCAT('%', CAST(b.ID AS STRING), '%');

但你可能真的想要:

SELECT a.Name, b.ID
FROM TableA a CROSS JOIN
     UNNEST(SPLIT(a.Name, '_')) namepart JOIN 
     TableB b
     ON namepart = CAST(b.ID AS STRING);

这看起来像是名称的每个部分,并允许 BigQuery 进行等式连接——这应该更具可扩展性。


推荐阅读