2017-02-15 68 views
0

我有以下查詢:數組索引出雲界扳手

SELECT * FROM Concerts 
WHERE (ARRAY_LENGTH(TicketPrices) > 0 AND TicketPrices[OFFSET(0)] IS NOT NULL); 

和我:

ERROR: OUT_OF_RANGE: Array index 0 is out of bounds. 

爲什麼第二部分是偶數時,第一部分是不計算真正?如何檢查數組是否有一個具有某個值的元素?

回答

0

一般來說,SQL對評估順序沒有任何保證(與提供短路評估的C++語言不同)。評估左側之前,引擎可以自由評估AND的右側。您可以useIF(cond,then-clause,else-clause)強制執行特定的評估順序。

這樣改寫,您的查詢將是:

SELECT * FROM Concerts 
WHERE IF(ARRAY_LENGTH(TicketPrices) > 0, TicketPrices[OFFSET(0)] IS NOT NULL, FALSE);