【问题标题】:Selects inside case statements in google big query在 google bigquery 中选择内部案例语句
【发布时间】:2016-09-12 14:43:33
【问题描述】:

当字符串 'DebugData' 包含数字时,我必须进行子选择。但在谷歌大查询中,我收到错误“选择子句中不允许子选择”。任何帮助将不胜感激!

 %%sql --module Test2
 DEFINE QUERY Test2
 SELECT 
 HardwareId, DebugReason, DebugData, 
 CASE 
  WHEN lower(DebugData) LIKE 'ver%' THEN 'Verizon'
  WHEN lower(DebugData) LIKE 'ro%' THEN 'Rogers'
  WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network
   (SELECT Network from [red-road-574:RawDebug.CarrierDetails] Where Mcc = SUBSTR(DebugData,0,3) and Mnc = SUBSTR(DebugData,4,7))
  ELSE REGEXP_REPLACE(DebugData,'\\?',' ')
 END
  as ActualDebugData
  FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T], TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')))
  CROSS JOIN [bigdata:RawDebug.CarrierDetails] c
  WHERE DebugReason = 50013
  LIMIT 200

我试过了,但这不起作用:

 SELECT 
   DebugData, 
   CASE 
     WHEN lower(DebugData) LIKE 'jas%' THEN 'Jasper' 
     WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network
     ELSE REGEXP_REPLACE(DebugData,'\\?',' ')
   END
  as ActualDebugData 
  FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')) d)
  CROSS JOIN [bigdata:RawDebug.CarrierDetails] c
  WHERE d.DebugReason = 50013 and c.Mcc =    SUBSTR(DebugData,0,3)
 LIMIT 200

【问题讨论】:

    标签: mysql sql google-bigquery


    【解决方案1】:

    请改用LEFT JOIN

    SELECT 
       DebugData, 
       CASE 
         WHEN lower(DebugData) LIKE 'jas%' THEN 'Jasper' 
         WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network
         ELSE REGEXP_REPLACE(DebugData,'\\?',' ')
       END
      as ActualDebugData 
      FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')) d)
      LEFT JOIN [bigdata:RawDebug.CarrierDetails] c ON c.Mcc =    SUBSTR(DebugData,0,3)
      WHERE d.DebugReason = 50013 
     LIMIT 200
    

    使用LEFT JOIN 允许它从第一个表中返回与连接条件不匹配的行。

    【讨论】:

    • 我有两个 where 语句,一个用于主选择,另一个用于子选择。不确定如何使用两个 where 进行两次选择。
    • 使用一个WHERE 语句并将它们与AND 结合起来。
    • 我已经尝试了上面的代码(在我的主要部分中添加了代码),但这不起作用..
    • 您以非常重要的方式更改了原始查询。原始查询在CarrierDetailsDebugData 之间没有任何依赖关系,它只是从 CarrierDetails 中的单行返回值。 CROSS JOIN 在表之间没有关系时使用。
    • 对不起,我明白,但这是我试图解决的原始问题。
    猜你喜欢
    • 2012-11-10
    • 2020-12-13
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多