2017-07-18 11 views
1

googleのbigqueryで、正確な一致(例:郵便番号)を検索したいとしますが、失敗した場合は、都市+州+国。1つの結果を返すクエリを構成する方法

だから、のようなもの:

select * 
from locations 
where 
    Target_Type = "Postal Code" and 
    Name = "L4A" and 
    Country_Code = "CA" 
    or 
    (
    Name = "Toronto" and 
    Target_Type = "City" and 
    Country_Code = "CA" 
) 

これは2を返し、私は最初のマッチのみを取得したい、と最初のマッチが失敗した場合にのみ第二。

これを行う方法?

答えて

1

どちらが優先されるかを示すダミーフィールドを作成します。両方の検索を行うにはUNIONを使用してください。

SELECT '1st Match' as priority, <some fields> 
FROM YourTable 
WHERE <some conditions> 
UNION ALL 
SELECT '2st Match' as priority, <some fields> 
FROM YourTable 
WHERE <other conditions> 
ORDER BY priority, <other sort field> -- in case query return multiple result 
LIMIT 1 
+0

のようにあなたがちょうど2つのより多くの「ルール」を追加することができますあなたは必ず、あなたの答えはBigQueryのために適用されていますか? Unrecognized token UNIONというエラーが表示されます。 – Carmageddon

+1

大きなクエリには慣れていませんが、 'UNION ALL'のように見えます。https://chartio.com/resources/tutorials/how-to-union-queries-in-google-bigquery/ –

+1

@Carmageddonうまくいきました。クエリの冒頭に#standardSQLを追加してみてください –

2

BigQueryの標準SQL - さらに別のオプションは、考慮すべき - それはあなたの例

#standardSQL 
WITH locations AS (
    SELECT "Postal Code" AS Target_Type, "L4A" AS Name, "CA" AS Country_Code UNION ALL 
    SELECT "City", "Toronto", "CA" 
) 
SELECT * 
FROM locations 
WHERE (
    Target_Type = "Postal Code" AND 
    Name = "L4A" AND 
    Country_Code = "CA" 
) OR (
    Name = "Toronto" AND 
    Target_Type = "City"AND 
    Country_Code = "CA" 
) 
ORDER BY CASE Target_Type 
    WHEN "Postal Code" THEN 1 
    WHEN "City" THEN 2 
    ELSE 3 END 
LIMIT 1 
+0

HI MBあなたは本を書きましたが、私の答えはBigQueryで使えますか?または私の方法でオフですか? –

+0

@JuanCarlosOropeza - はい - その構文はBigQueryで機能するはずです –

関連する問題