Considere esta declaração select:
SELECT *,
1 AS query_id
FROM players
WHERE username='foobar';
Ele retorna a coluna query_id
com valor 1
junto com as outras colunas de um jogador.
Como alguém faria o SQL acima retornar pelo menos o query_id
mesmo 1
que o select não encontrasse nenhuma linha que corresponda?
BTW, é o PostgreSQL 8.4.
Ou como alternativa ( pode ser mais rápido, pois não é necessária uma segunda subseleção):
Você pode reescrever o acima para uma representação mais "compacta":
Mas acho que o CTE explícito (
with...
) é mais legível (embora isso esteja sempre nos olhos de quem vê).Se você está esperando apenas uma ou zero linhas de volta, isso também funcionaria:
Isso retornará uma linha com todos os valores com nulo, exceto query_id, se nenhuma linha for encontrada.
Chiming atrasado aqui, mas aqui está uma sintaxe que funciona (pelo menos na 9.2, não tentei versões anteriores).
Só retornará a linha "em branco" se todo o conteúdo de "a" for nulo.
Apreciar. /bithead
eu precisava fazer algo parecido e meu cérebro não estava dando, então pesquisei e encontrei essa pergunta... pode ser simplificado mais?! :)