2016-07-05 48 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用例 - 這是我能想到的最好的。但你可以等待其他迴應 –

相關問題