Pergunta

I tem uma coluna em minha base de dados (um sinalizador) com o tipo VARCHAR (1) que é povoada Y ou nula (isto é como é, não no meu controlo).

No SQL Server, fazendo uma ordem ascendente por consulta, NULL é ordenado no topo. Caso este comportamento ser consistente para Oracle e DB2?

Se, em vez eu tenho um COALESCE na coluna para garantir que ele não é nulo na consulta, eu sou provável bater quaisquer problemas de desempenho (devido a verificações de tabela e assim por diante)? ??

Editar

A consulta deve ser consistente ao longo de todos os 3 bancos de dados, caso contrário, vou ter que lidar com isso no código, portanto, o meu pensamento de usar a função COALESCE

Editar

Eu escolhi Pax como a resposta, como ele lidou com as duas partes da questão e deu uma solução útil, no entanto, graças à me.yahoo.com/a/P4tXrx para o link para aqui

Foi útil?

Solução

Eu sei para um fato que o DB2 Express e DB2 (pelo menos até v8) faz não apoiar a cláusula NULLS FIRST.

Se você quer uma solução portátil, você pode ter que optar por algo como:

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

Eu acho que o resultado da união (pelo menos em DB2, você precisará verificar os outros) é garantido para ser encomendados corretamente.

O coalesce tem implicações de desempenho desde que você está executando uma função para cada linha retornada. No entanto, isso depende do número de linhas no banco de dados.

Você pode muito bem ter que recorrer a fazer duas consultas em código em sets de gravação diferentes, em seguida, processá-los em ordem.

EDIT: Eu verifiquei apenas o padrão SQL e não é garantido que as consultas se juntaram com um UNION ALL são seqüenciados; eles podem ser inter-mista. Portanto, parece que você pode ter que recorrer ao código execução de duas consultas diferentes como mencionado acima.

Outras dicas

No SQL Server, fazendo uma ordem ascendente por consulta, NULL é ordenado no topo. Caso este comportamento ser consistente para Oracle e DB2?

Aparentemente este é um parente recém-chegado ao padrão.

principal funcionalidade do padrão SQL não define explicitamente uma ordem de classificação padrão para valores nulos. Com o SQL: 2003 T611 extensão, "operações elementares OLAP", nulos podem ser classificados antes ou depois de todos os valores dados usando as cláusulas NULLS primeira ou NULLS último da lista ORDER BY, respectivamente. Nem todos os fornecedores de DBMS implementar essa funcionalidade, no entanto. Os fornecedores que não implementam esta funcionalidade pode especificar tratamentos diferentes para Null triagem nos DBMS.

Em oráculo que você pode fazer isso:

ORDER BY value NULLS FIRST 

ou

ORDER BY value NULLS LAST

Experimente no SQL Server

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top