2016-10-19 10 views
1

は、私は、テーブルには、反復レコードの「年齢」を持っているスキーマ、およびその再現性レコードの構造を持っている場合は次のとおりです。の問合せネストされた反復レコード

{年齢:28}

を発行することが可能ですその行の 'age'レコードに「age = 28 AND age = 56」が含まれているすべての行を検索するクエリ。したがって、このデータに

[ID = 1、年齢:[{年齢:28}、{年齢:56}、{年齢:62}]] [ID = 2、年齢:[{年齢:28}]] [id = 3、年齢:[{年齢:28}、{年齢:56}]]

行1と3だけが戻ってきますか?

ありがとうございます。レコード内の重複年齢層が存在しないと仮定し

答えて

2


とYourTableは、BigQueryのレガシーSQL用

id age 
1 28 
    56 
    62 
2 28 
3 28 
    56 

以下のようになります

SELECT * 
FROM YourTable 
OMIT RECORD IF SUM(age=28 OR age=56) <> 2 

またはBigQueryの標準SQLのための

SELECT *, 
    SUM(age=28 OR age=56) WITHIN RECORD AS qualify 
FROM YourTable 
HAVING qualify = 2 

Enabling Standard SQL

SELECT * 
FROM YourTable 
WHERE (SELECT COUNT(1) 
     FROM UNNEST(age) AS a 
     WHERE a = 28 OR a = 56 
     ) = 2 
+0

ありがとうございます。ちょうどそれを試してみましたが、テーブル全体のフルスキャンを行い、age.age = 28のテーブルからSELECT *を取るのに時間がかかりますか? – user3707

+0

私はあなたの意見を持っているかどうかはわかりません - あなたの質問もフルスキャンです!あなたの質問には何もありません。右?答えは質問を反映しています:o) –

+0

申し訳ありませんがミハイル、私は明確だったかどうかはわかりません。年齢= 28のレコードと年齢= 56のレコードがある行をどのように照会しますか?私。両方のレコード(ORではない)を持つ必要があります。 – user3707

関連する問題