Pregunta

Tengo una columna en mi base de datos (una marca) con el tipo varchar (1) que se rellena como Y o NULL (así es como está, no bajo mi control).

En SQL Server, haciendo un orden ascendente por consulta, NULL se ordena en la parte superior. ¿Debería este comportamiento ser coherente para Oracle y DB2?

Si, en cambio, tengo un COALESCE en la columna para garantizar que no sea nulo en la consulta, ¿es probable que tenga problemas de rendimiento (debido a escaneos de tablas y similares)?

EDIT

La consulta debe ser coherente en las 3 bases de datos, de lo contrario, tendré que manejarla en código, de ahí mi intención de usar la función COALESCE

EDIT

Elegí Pax como respuesta, ya que se ocupó de ambas partes de la pregunta y me dio una solución útil, sin embargo, gracias a me.yahoo.com/a/P4tXrx por el enlace a aquí

¿Fue útil?

Solución

Sé a ciencia cierta que DB2 Express y DB2 (al menos hasta v8) no admiten la cláusula NULLS FIRST .

Si desea una solución portátil, es posible que deba optar por algo como:

select * from tbl where fld is null
    union all select * from tbl where fld is not null

Creo que el resultado de la unión (al menos en DB2, deberá verificar los otros) está garantizado para que se ordene correctamente.

La fusión tendrá implicaciones de rendimiento ya que está ejecutando una función para cada fila devuelta. Sin embargo, depende del número de filas en la base de datos.

Puede que tenga que recurrir a hacer dos consultas en código en dos conjuntos de registros diferentes, y luego procesarlas en orden.

EDITAR: acabo de comprobar el estándar SQL y no está garantizado que las consultas unidas con un UNION ALL estén secuenciadas; podrían estar entremezclados. Por lo tanto, parece que tendrá que recurrir al código que ejecuta dos consultas diferentes como se mencionó anteriormente.

Otros consejos

  

En SQL Server, haciendo un orden ascendente por consulta, NULL se ordena en la parte superior. ¿Debería ser este comportamiento coherente para Oracle y DB2?

Aparentemente es un recién llegado al estándar .

  

La funcionalidad principal del estándar SQL no define explícitamente un orden de clasificación predeterminado para Nulls. Con la extensión SQL: 2003 T611, "Operaciones OLAP elementales", los valores nulos se pueden ordenar antes o después de todos los valores de datos utilizando las cláusulas NULLS FIRST o NULLS LAST de la lista ORDER BY, respectivamente. Sin embargo, no todos los proveedores de DBMS implementan esta funcionalidad. Los proveedores que no implementan esta funcionalidad pueden especificar diferentes tratamientos para la ordenación nula en el DBMS.

En Oracle puedes hacer esto:

ORDER BY value NULLS FIRST 

o

ORDER BY value NULLS LAST

Pruébelo en SQL Server

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top