Considere esta declaración de selección:
SELECT *,
1 AS query_id
FROM players
WHERE username='foobar';
Devuelve la columna query_idcon valor 1junto con las otras columnas de un jugador.
¿Cómo podría uno hacer que el SQL anterior devuelva al menos el query_idde 1incluso si la selección no encuentra filas que coincidan?
Por cierto, es PostgreSQL 8.4.
postgresql
select
null
Nathanael Weiss
fuente
fuente

order by. La segunda "crea" una tabla virtual con exactamente una fila y una columna y realiza una unión externa (sin ninguna condición de unión "real"), por lo que siempre obtiene al menos esa fila. Usarselect *en el código de producción es un mal estilo. No lo hagas Enumere siempre las columnas que necesita.select *debe solamente ser utilizados en las consultas ad-hoc.left joinno es legible?UNION ALLveces puede ser más eficiente queUNION, ya que explícitamente le está diciendo al planificador de consultas que espera que no haya filas duplicadas que salgan de lasUNIONconsultas ed o si hay que quieres que salgan. Sin elALLmodificador, supone que desea eliminar las filas duplicadas (solo una de cada una devuelta) de forma muy similar a laDISTINCTpalabra clave, y para garantizar que pueda necesitar recurrir + volver a escanear los resultados un tiempo extra. Por lo tanto, useALLcon aUNIONmenos que necesite específicamente la desduplicación de la fila de salida.Si solo espera una o cero filas hacia atrás, esto también funcionaría:
Esto devolverá una fila con todos los valores nulos, excepto query_id si no se encuentra ninguna fila.
fuente
username = 'foobar'Entrando tarde aquí, pero aquí hay una sintaxis que funciona (al menos en 9.2, no he probado versiones anteriores).
Solo devolverá la fila "en blanco" si todo el contenido de "a" es nulo.
Disfrutar. / cabeza de bit
fuente
fuente