2014-04-29 51 views
1

ANY直覺意思是:任何匹配的集合。 不過,我發現了它,因爲預計在兩種情況下它並不表現:反向直觀含義< ANY & > SQL中的ANY邏輯運算符

x > ANY(...)值必須大於 最小值的名單,以評估爲TRUE更大。
x < ANY(...)的值必須大於在列表中的最大的值小 評估爲TRUE

Source

換句話說,通過ANY引入子查詢的全部結果必須是與x相比,這與ANY的含義相反。 爲什麼會這樣,或者我只是誤解了<ANY & >ANY運營商的語義?

+0

「ANY」表現爲「ANY」。當你說「他們中的任何一個......」時你的意思是什麼?你的意思是「所有人」?另外看看[this](http://www.merriam-webster.com/dictionary/any) –

+0

對我來說這是正確的意思。但是你很難看到使用ANY/ALL的查詢,因爲大多數DBMS不能實現它,並且它可以用更易讀的查詢(IMHO)輕鬆地重寫。例如。你不寫「x = ANY」而不是「x IN」 – dnoeth

+0

你正在使用'ANY'並期望'ALL'的功能 – Serpiton

回答

2

x > ANY(...)該值必須大於列表中評估爲TRUE的最小值。 x < ANY (...)該值必須小於列表中要評估爲TRUE的最大值

以上兩個聲明均聲明瞭oracle可能用於比較的算法。例如。

select * from X where id > Any (1 , 2 , 3 , 4 , 5) 

在上面的代碼可以向下鑽取作爲

id > 1 OR id > 2 OR id > 3 and so on.. 

所以只有ID> 1將斷言其真。 (算法優化)與他們的方式相同x < ANY (...)

1

x > ANY(...)的值必須大於列表中的最小的值,以評估TRUE

這說明結果。這可能需要考慮一下。 x可能大於值在列表中,它仍然會返回TRUE。相反可能會更容易理解:

x > ANY(...)FALSE如果該值小於或等於列表中的最小值,因爲它也必須小於或等於列表的所有其他成員

或者另一種方法:如果在列表中至少一個值,y說,那x大於

x > ANY(...)將是真實的。如果有一組這樣的y值,則列表中的最小值在邏輯上必須是該組中的一個成員。

相關問題