【发布时间】:2013-07-09 09:53:05
【问题描述】:
我使用 SQL(SQL Server、PostgreSQL)已有 10 多年了,但我从未在生产代码中使用过 ANY/SOME 和 ALL 关键字。我遇到的所有情况都可以使用IN、MAX、MIN、EXISTS,而且我认为它更具可读性。
例如:
-- = ANY
select * from Users as U where U.ID = ANY(select P.User_ID from Payments as P);
-- IN
select * from Users as U where U.ID IN (select P.User_ID from Payments as P);
或者
-- < ANY
select * from Users as U where U.Salary < ANY(select P.Amount from Payments as P);
-- EXISTS
select * from Users as U where EXISTS (select * from Payments as P where P.Amount > U.Salary);
使用ANY/SOME 和ALL:
所以问题是:我错过了什么吗?是否存在ANY/SOME 和ALL 优于其他解决方案的情况?
【问题讨论】:
-
过去 13 年我也没用过。
-
我也从未使用过
EXCEPT。我坚持NOT EXISTS -
我不同意这一点,我认为
EXCEPT有助于找出具有相同架构的两个表之间的差异 -
但是具有相同结构(在相同架构内)的表很少见。但是,当您允许视图或表格表达式时,可能会有所不同。
-
在 Postgres 中,ANY/ALL 语法对于搜索数组很有用,尽管我从未在普通 SQL 中使用过它。 Array searching
标签: mysql sql sql-server postgresql ansi-sql