2015-10-13 45 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

相關問題