2016-07-05 46 views
0

这类似于这个话题在这里:BigQuery IF field exists THEN的BigQuery查询第一个可用列

然而,我们只从一个表查询,因此该表将只要么A列或列B.我们发现,如果查询2个表,其中一个有列A,另一个有列B,那么下面的函数可以工作,但是对于我们的用例,我们只想查询一个表,并且我们不知道哪列存在或包含数据。我们想要查询存在并包含数据的第一列。

  --This query works 
      SELECT user_id,COALESCE(devices.A, B) 
      FROM mytable1, 
      mytable2 
      limit 100 

      -- This query does not work 
      SELECT user_id,COALESCE(devices.A, B) 
      FROM mytable1 
      limit 100 

,我们得到该错误消息是 查询失败 错误:字段“devices.A”不是表“MYTABLE1”发现;你的意思是'devices.fieldthatexists'?

下面
+0

重要的是,您可以使用投票下方发布的答案左侧的勾号标记接受的答案。请参阅http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235了解其重要性。答案投票也很重要。表决有用的答案。还有更多......当某人回答你的问题时,你可以查看该怎么做 - http://stackoverflow.com/help/someone-answers。 –

回答

0

是快速的解决方法方向

-- This query does not work 
SELECT user_id,COALESCE(A, B) 
FROM (
    SELECT 1 AS user_id, 1 AS C 
) AS mytable1 
LIMIT 100 

错误消息Error: Field 'A' not found; did you mean 'C'?

-- This query will work 
SELECT user_id,COALESCE(A, B) 
FROM (
    SELECT 1 AS user_id, 1 AS C 
) AS mytable1, 
(SELECT 1 AS A, 2 AS B) AS faketable 
WHERE user_id IS NOT NULL 
LIMIT 100 

解决方法的想法是只用一排是“补偿”缺场与当时的消除提供假表WHERE子句中的相应假行

希望这有助于

+0

感谢您的解决!这是否意味着没有其他可能的方式?我在这里查询的是实际查询的简化版本,它包含超过100行的生产代码,如果有更简单的方法来完成此操作,那将是非常好的。 –

+0

我认为引用不存在的列会引发错误。所以不知何故,你需要“假”系统认为他们是模式的一部分。我的回答中的解决方法是这样的。根据你简化的例子和有限的reallife用例 - 这是我能想到的最好的。但你可以等待其他回应 –

相关问题