2016-10-19 90 views
1

如果我有一个模式,其中一个表中有一个重复的记录“年龄”,而重复记录的结构是:查询嵌套重复记录

{年龄:28}

是否有可能发行用于搜索该行的“年龄”记录包含“年龄= 28 AND年龄= 56”的所有行的查询。

因此,在这种数据:

[ID = 1,年龄:[{年龄:28},{年龄:56},{年龄:62}]] [ID = 2,年龄:[{年龄:28}]] [id = 3,年龄:[{年龄:28},{年龄:56}]]

只有行1和3回来?

在此先感谢。

回答

2

假设有记录中没有重复的年龄
和YourTable看起来如下

id age 
1 28 
    56 
    62 
2 28 
3 28 
    56 

可供BigQuery传统的SQL

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

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

为BigQuery的标准SQL (见Enabling Standard SQL

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

感谢您的支持。刚刚尝试过,它对整个表进行了全面扫描,需要很长时间,而从表WHERE age.age = 28的SELECT * – user3707

+0

我不确定我是否明白你的观点 - 你的查询也做了全面扫描!关于它的问题没有任何问题。对?答案反映了这个问题:o) –

+0

对不起米哈伊尔,我不清楚。我如何查询具有年龄= 28的记录的行和年龄= 56的记录。即它必须匹配有两个记录(不是OR)。 – user3707