如何在单个条目匹配时选择整个记录

时间:2015-10-13 09:50:45

标签: google-bigquery

我有一个需要聚合数据的情况,并且每行都有一个嵌套的记录。我想做的是查看记录中的条目是否匹配,然后完整地返回记录,因为我对那里的其他数据感兴趣。这是我拥有的数据的基本模式

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

所以像这样选择

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

只返回记录中有一个匹配“candy”而不是“game”的键的行。希望这能使我的问题变得清晰。

2 个答案:

答案 0 :(得分:4)

在BigQuery中,您可以为此目的使用OMIT RECORD IF子句:

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

答案 1 :(得分:-1)

您使用的是SQL吗?

&#34;属性&#34;的真实结构是什么? ?

您应该使用内部联接来查找&#34; candy&#34;。

然后是一个外部联接来匹配&#34;游戏&#34;并保留那些为空的。

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;