我有一个需要聚合数据的情况,并且每行都有一个嵌套的记录。我想做的是查看记录中的条目是否匹配,然后完整地返回记录,因为我对那里的其他数据感兴趣。这是我拥有的数据的基本模式
|- name
|- age
+- properties (repeated)
| |- key
| |- value
所以像这样选择
SELECT
<some-columns>
FROM
<table>
WHERE
propeties.key = "candy"
只返回记录中有一个匹配“candy”而不是“game”的键的行。希望这能使我的问题变得清晰。
答案 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;