2016-07-05 2 views
0

これは、ここで、このトピックに似ています:BigQuery IF field exists THENBigQueryのクエリ、使用可能な最初の列

しかし、我々は唯一のテーブルから照会されているので、テーブルのみの列Aまたは列Bのいずれかを持っています私たちは、あなたが照会するとことがわかりました2つのテーブルのうち1つが列Aを持ち、もう1つが列Bを持つ場合、以下の関数が機能します。 しかし、このユースケースでは、1つのテーブルのみをクエリしたいだけで、データが存在するか、存在し、データを含む最初の列を照会する必要があります。

  --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 

エラーメッセージが回避策のアイデアは、その後除去するとともに欠落フィールドを「補う」ことただ1行の偽テーブルを供給することである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

存在しない列を参照するとエラーが発生すると思います。だから何とかあなたはスキーマの一部であると考えるためにシステムを「偽造」する必要があります。私の答えの回避策はこれを行います。あなたの単純化された例と、実際の使用の制限された露出に基づいて - これは私が考えることができる最高です。あなたは他の応答を待つことができます –

関連する問題