【问题标题】:How to perform a join between two tables in Big Query by using sub string function in the join clause如何使用连接子句中的子字符串函数在 Big Query 中的两个表之间执行连接
【发布时间】:2016-01-13 00:02:20
【问题描述】:

我有一些来自两个表的输入数据,如下所示,我需要将它们连接起来以从中提取一些结果。请仔细阅读以下详细信息。任何输入/想法将不胜感激。

Table A
ColA,ColB
abc,1
def,2



Table B
ColA,ColC
abc_,45
abc*,67
def_,23
def,12

现在我需要连接 ColA 上的两个表 A、B 以提取结果。我在这里面临的复杂部分是我想忽略 *,_ 然后加入两个表并得到如下最终结果。

Expected Result :-

abc,1,45
abc,1,67
def,2,23
def,2,12

What I have tried?

SELECT A.ColA AS ColA,
       A.ColB AS ColB
       B.ColC AS ColC
  FROM TableA A
JOIN EACH 
       TableB B
    ON A.ColA = B.ColA; 

 -- SUBSTR( B.ColA, 1, LENGTH( A.ColA ) ) 

Comments :- The above join clause using SUBSTR function is not supported in Big Query.

【问题讨论】:

  • JOIN ... ON B.ColA LIKE A.ColA + '%' ...JOIN ... ON B.ColA LIKE CONCAT(A.ColA , '%' )
  • JOIN条件是ON A.ColA = SUBSTR( B.ColA, 1, LENGTH( A.ColA ) )吗?
  • @SOaddict 你试过LIKE吗?
  • 尝试在 ON 子句中使用 LIKE 运算符。我得到以下错误 ON 子句必须是 AND of = 每个表中一个字段名的比较,所有字段名都以表名为前缀。
  • 一种非常低效的方法是交叉连接两个表并在 WHERE 中使用 SUBSTR/LIKE 进行过滤

标签: sql regex bigdata google-bigquery


【解决方案1】:

尝试在 JOIN 之前转换列,这样就可以进行相等 JOIN:

SELECT cola, colb, colc
FROM [tablea] a
JOIN (
  SELECT LEFT(cola, 3) cola_x, colc
  FROM [tableb]
) b 
ON a.cola=b.cola_x

【讨论】:

    猜你喜欢
    • 2015-05-15
    • 2013-11-14
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2015-08-18
    • 1970-01-01
    相关资源
    最近更新 更多