Considere esta instrução select:
SELECT *,
1 AS query_id
FROM players
WHERE username='foobar';
Retorna a coluna query_id
com valor 1
junto com as outras colunas de um jogador.
Como se poderia fazer o retorno SQL acima, pelo menos, o query_id
de 1
mesmo se as descobertas selecione há linhas que jogo?
BTW, é o PostgreSQL 8.4.
postgresql
select
null
Nathanael Weiss
fonte
fonte
order by
. O segundo "cria" uma tabela virtual com exatamente uma linha e uma coluna e faz uma junção externa (sem nenhuma condição de junção "real"), portanto, você sempre recupera pelo menos essa linha. Usarselect *
código de produção é um estilo ruim. Não faça isso. Sempre liste as colunas necessárias.select *
deve ser usado apenas em consultas ad-hoc.left join
não é legível?UNION ALL
às vezes pode ser mais eficiente do queUNION
quando você diz explicitamente ao planejador de consultas que você espera que não haja linhas duplicadas saindo dasUNION
consultas ed ou se você quer que eles sejam produzidos? Sem oALL
modificador, ele pressupõe que você deseja remover linhas duplicadas (apenas uma de cada uma retornada) da mesma forma que aDISTINCT
palavra - chave e para garantir que seja necessário recorrer + verificar novamente os resultados por mais tempo. Portanto, useALL
comUNION
menos que você precise especificamente da deduplicação da linha de saída.Se você espera 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.
fonte
username = 'foobar'
Chiming atrasado aqui, mas aqui está uma sintaxe que funciona (pelo menos na 9.2, ainda não tentei versões anteriores).
Retornará apenas a linha "em branco" se todo o conteúdo de "a" for nulo.
Desfrutar. / bithead
fonte
fonte