32

背景情報

序数表記、別名ordinalsはSELECT、列名または列エイリアスではなく、句内の列のリスト内の列の順序に基づく列の省略形です。句で一般的にサポートされているORDER BY一部のデータベース(MySQL 3.23以降、PostgreSQL 8.0以降)は、GROUP BY句の構文もサポートしています。

序数の使用例は次のとおりです。

GROUP BY 1, 2
ORDER BY 1, 2

クエリが脆弱になるため、使用するのは適切ではありません。列の順序が変更された場合、序数を更新する必要があります。そうしないと、クエリが思ったとおりに返されません。GROUP BYこれらの場所の列が集計でラップされている場合、で使用するとエラーが発生する可能性があります...

質問

私が考えることができる唯一の利点は、ストアドプロシージャまたは関数を使用していない場合に、ネットワーク経由で送信するデータが少なくなることです(とにかく、通常の使用法は意味がありません)。私が見逃している他の利点はありますか?

4

6 に答える 6

37

私はそれを使用します:

  • トラブルシューティングが好きなら
  • インテリセンスなしでアドホッククエリを作成する

利点はありません。

SQL Serverは、とにかくORDERBYでのみサポートします。それ以外の場所では、評価される式です。

于 2010-02-24T17:43:27.587 に答える
15

多くの列を持つテーブルをクエリしているとき(データ探索のためだけにアドホックランドで... PROD環境ではこのようにコーディングすることは決してありません)、気になるフィールドを取得するためにこのようなことをすることがよくあります一緒に閉じる:

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

order by Col_1, Col_117 desc, Col_50「*」が2倍になるため、ステートメントがどの列を並べ替えるのかわからないため、クエリがバーフになると言った場合。あまり一般的ではありませんが、それでも便利な機能です。

于 2010-07-09T01:29:07.923 に答える
6

私の2つのユースケースは次のとおりです。

  • 急いで入力したくないので、序数を使用します。一時的でない使用のために、これを常に列名に変換します
  • 私が注文している列は長いCASEステートメントです。CASE句のステートメントを再入力するのではなく、DRYORDER BYを維持する序数を使用します。これを回避する方法はいくつかあります。たとえば、CTE、サブクエリ、またはビューを使用しますが、序数が最も簡単な解決策であることがよくあります。
于 2010-02-12T16:00:30.057 に答える
2

私は今、インラインビューを使用する傾向があります。

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

しかし、それらが有効な構文になる前の数日間は、列の全文を再入力するのに役立ちました。トリッキーな関数を使用すると、SELECTとORDERBYの値が一致しない可能性があります。

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

SELECTの「0」は、選択したもので並べ替えていないことを意味します。

于 2010-02-12T21:01:50.023 に答える
1

クエリ生成アルゴリズムがあります-SQLは自動生成されます。序数を使用すると、フィールド名を再度取得しなくても、生成されたフィールドを参照できます。ユーザーは、画面上のリストからフィールド名を選択することにより、テーブル内のフィールド名を参照できます。リストをSQLに対応させる限り、SELECT項目も序数であれば、フィールド名を知る必要はありません。

メモリによると、これは1970年代後半のSQL標準に含まれていたとのことです。

于 2016-06-29T10:46:12.523 に答える
0

私が正しく思い出せば、あなたが説明しているような序数の使用は、SQLServerの将来のリリースでMicrosoftによって非推奨にされています。私はこれについて間違っている可能性がありますが、そうだと思います。長いクエリを含む派生列を処理するときに入力が少なくて済むため、特定の場合にそれらを使用するのが好きでした。

于 2010-02-12T15:58:19.333 に答える