2015-10-13 43 views
3

我有一种情况,我需要汇总数据,并且每行都有一个嵌套的记录。我想要做的是查看记录中的条目是否匹配,然后返回整条记录,因为我对那里的其他数据感兴趣。下面是数据的基本模式我有如何在单个条目匹配时选择整个记录

|- name 
|- age 
+- properties (repeated) 
| |- key 
| |- value 

因此,一个选择这样

SELECT 
    <some-columns> 
FROM 
    <table> 
WHERE 
    propeties.key = "candy" 

那只返回,其中记录有符合“糖果”,而不是“游戏”一键行。希望这能让我的问题清楚。

回答

3

BigQuery中你可以,如果为此目的子句中使用OMIT RECORD:

SELECT 
    <some-columns> 
FROM 
    <table> 
OMIT RECORD IF 
    EVERY(propeties.key != "candy") 
+0

完美,正是我所需要的。谢谢! – Jiekebo

-1

您使用的是SQL吗?

“属性”的真实结构是什么?

您应该使用内部联接来查找“糖果”。

然后外部连接匹配“游戏”,并只保留那些为空。

SELECT id, name, age 
FROM table 
INNER JOIN properties AS p1 
ON table.id = p1.table_id AND p1.value = "candy" 
LEFT OUTER JOIN properties AS p2 
ON table.id = p2.table_id AND p2.value = "game" 
WHERE p2.value IS null; 

我不知道这是否有效。

在PostgreSQL,子选择是非常有效:

SELECT id, name, age 
FROM table 
INNER JOIN (SELECT table_id FROM PROPERTIES WHERE value = "candy") AS p1 
ON table.id = p1.table_id 
LEFT OUTER JOIN (SELECT table_id FROM PROPERTIES WHERE value = "game") AS p2 
ON table.id = p2.table_id 
WHERE p2.table_id IS null; 
+0

他正在使用的BigQuery,而 “记录”是一种特殊类型,不需要加入。 – Pentium10

+0

谢谢你的回答@Vouze。 – Jiekebo

相关问题