Benefícios do uso de notação de posição Ordinal SQL?

Informação Geral

a notação da posição Ordinal, também conhecida por ordinais, é a abreviatura da coluna baseada na ordem da coluna na lista de colunas da cláusula SELECT, em vez do nome da coluna ou do nome da coluna. Comumente suportado na cláusula ORDER BY, algumas bases de dados (MySQL 3.23+, PostgreSQL 8.0+) suportam a sintaxe para a cláusula GROUP BY também.

Aqui está um exemplo de usar ordinais:

GROUP BY 1, 2
ORDER BY 1, 2
Não é bom usar porque faz a consulta brittle-se a ordem da coluna mudar, os ordinais precisam ser atualizados ou sua consulta não retornará o que você pensou que seria. Muito provavelmente, você obterá um erro quando usado em GROUP BY se as colunas nesses locais estão embrulhadas em agregados...

A Pergunta

o único benefício que me ocorre é menos dados para enviar através do fio, se você não estiver usando procedimentos armazenados ou funções (que fazem com que o uso de ordinal não tenha importância, para mim de qualquer maneira). Há outros benefícios que eu ... desaparecido?

divulgação

Isto pode parecer um trabalho de casa, mas é pesquisa para um almoço educacional que o escritório faz todos os meses. Eles pagam o almoço, nós temos que fornecer um pequeno tópico de interesse.

Author: David Mulder, 2010-02-12

6 answers

Eu usaria:

  • Se gostas de resolução de problemas
  • Criando perguntas adhoc sem intellisense
Não há vantagem.

O servidor SQL só suporta na ordem de qualquer forma. Em qualquer outro lugar é uma expressão a ser avaliada.

 33
Author: gbn, 2010-02-24 17:43:27

Muitas vezes quando estou a questionar uma tabela com muitas colunas (em terra ad-hoc apenas para exploração de dados... Eu nunca faria um código como este para um ambiente de PROD) eu faço algo assim para obter campos que eu gosto perto juntos:

select top 1000
  Col_1, Col_18, Col_50, Col_117, *
from
  TableWithTonsOfCols
order by
  1, 4 desc, 3

Se eu dissesse order by Col_1, Col_117 desc, Col_50 a minha pergunta iria vomitar porque a declaração não saberia que colunas eu pretendia encomendar devido à duplicação"*". Não é muito comum, mas ainda é uma característica útil.

 15
Author: mattmc3, 2010-07-09 01:29:07

Os dois casos de uso para mim são:

    Estou com pressa e não quero dactilografar, por isso uso o ordinal. Eu iria sempre Converter isto para o nome da coluna para qualquer uso não temporário
  • a coluna pela qual estou a encomendar é uma declaração longa {[[0]}; em vez de escrever a declaração {[[0]} para a cláusula ORDER BY, Uso o ordinal que a mantém seca . Existem maneiras de contornar isso, por exemplo, usando CTEs, subqueries, ou view, mas eu frequentemente acho que o ordinal é o mais simples solucao.
 5
Author: D'Arcy Rittich, 2010-02-12 16:00:30

Tenho tendência a usar vistas em Linha:

select col_a, count(*) from
  (select case ...... end col_a from ...)
group by col_a
order by col_a;

Mas nos dias antes de serem uma sintaxe válida, ajudou a reescrever o texto completo da coluna. Com funções complicadas você tinha o potencial para discrepâncias entre o valor na seleção e ordem por tais como

select ltrim(col_name,'0123456789')
from table
order by ltrim(col_name,'123456789')

O ' 0 ' na selecção significa que não está a pedir pelo que selecciona.

 2
Author: Gary Myers, 2010-02-12 21:01:50

Tenho um algoritmo gerador de consultas - o SQL é gerado automaticamente. Usar o ordinal significa que posso me referir ao campo gerado sem ter que buscar o nome do campo novamente. O usuário pode se referir ao nome do campo em uma tabela, selecionando-o de uma lista na tela. Desde que eu faça a lista corresponder com o sql, eu nunca precisaria saber os nomes dos Campos, se os itens selecionados fossem ordinais, também.

A memória diz que isto estava no padrão SQL no final dos anos 70.
 1
Author: Perry Sugerman, 2016-06-29 10:46:12

Se bem me lembro, o uso de ordinais como o Senhor descreve está a ser desactualizado pela Microsoft numa versão futura do SQL Server. Posso estar enganado, mas acho que é esse o caso. Eu sempre gostei de usá-los em certos casos, porque envolve menos digitação quando você está lidando com colunas derivadas que contêm uma consulta longish.

 0
Author: Randy Minder, 2010-02-12 15:58:19