En Postgres, ANY
y SOME
son sinónimos cuando se usan en el lado derecho de una expresión de predicado. Por ejemplo, estos son los mismos:¿Hay SQL ALGUNOS y ALGUNOS sinónimos de palabras clave en todos los dialectos de SQL?
column = ANY (SELECT ...)
column = SOME (SELECT ...)
Esto está documentado aquí:
http://www.postgresql.org/docs/9.1/static/functions-subquery.html#FUNCTIONS-SUBQUERY-ANY-SOME
he observado ANY
y SOME
ser apoyada por al menos éstos SQL DBMS:
- DB2
- Derby
- H2
- HSQLDB
- Ingres
- MySQL
- Oracle
- Postgres
- SQL Server
- Sybase ASE
- Sybase SQL Anywhere
¿Puedo con seguridad asumir que todos esos d ialects (y otros, también) tratan ANY
y SOME
como sinónimos o existe una diferencia sutil entre las dos palabras clave en alguno/algunos DBMS?
He encontrado esto en la definición SQL92:
<quantifier> ::= <all> | <some>
<all> ::= ALL
<some> ::= SOME | ANY
Esto no dice nada acerca de la semántica de ANY
y SOME
. Más adelante en el documento, solo se hace referencia al <some>
, no a las dos palabras clave. Sospecho que podría haber una diferencia sutil en el manejo de NULL
, por ejemplo, al menos en algunos DBMS. Cualquier/algún puntero a una declaración clara de si esto puede ser asumido o no es bienvenido.
+1 Yo ni siquiera sabía acerca de ALGUNO/CUALQUIERA hasta esta pregunta. ¡Aprenda algo nuevo cada día! :-) – klabranche
@klabranche: ¡Sí, permite una sub consulta muy elegante! Postgres incluso acepta una sintaxis [ANY (array), SOME (array), ALL (array)] (http://www.postgresql.org/docs/9.1/static/functions-comparisons.html#AEN17416) –
Definitivamente algo para poner en la herramienta de cinturón. – klabranche