タグ付けされた質問 「alias」

2
メインクエリのエイリアスと同じサブクエリのエイリアス
エイリアスがそのサブクエリのエイリアスのいくつかと同じであるSQLクエリがあります。 例えば: select * from ROOM r where ... ( select * from ROAD r where ... ) サブクエリのエイリアスはメインのエイリアスを隠すように見えるため、これはうまく機能します。 それはすべての場合にそのように機能しますか? 未定義の結果を取得することはありますか? それが問題ない場合、メインクエリの参照を作成するにはどうすればよいrですか?

3
ほとんどの句で列エイリアスの使用を許可しないような方法でクエリが解析されるのはなぜですか?
クエリを記述しようとすると、SQL Serverはクエリを実行するときにSELECTを解析する前に、クエリ内のWHEREを解析する(難しい方法)ことがわかりました。 MSDNドキュメントは、一般的な論理解析順序はSELECTは(したがって、「そのようなオブジェクト[別名」エラーは他の句の列別名を使用しようとしない場合に得られた)、ほぼ最後に解析されるようなものであると言います。エイリアスをどこでも使用できるようにする提案もありましたが、MicrosoftチームはANSI規格への準拠の問題を挙げてこれを打ち倒しました(この動作はANSI規格の一部であることを示唆しています)。 プログラマー(DBAではない)として、この動作がやや紛らわしいことに気づきました。列エイリアスを持つという目的を大幅に無効にしているように思われるためです(少なくとも、列エイリアスは、実際にエイリアスを使用できる場所はORDER BY のみであるため、クエリの実行の早い段階で解析されます)。プログラマーとしては、クエリをより強力で便利に、そしてDRYにする大きな機会を逃しているようです。 それは理にかなっているほど明白な問題のように見えますが、SELECTとORDER BY以外では列エイリアスを許可しないことを決定する他の理由がありますが、それらの理由は何ですか?
16 sql-server  alias 

3
SUM()を2回使用するのは最適ではありませんか?
句で使用する場合(または派生テーブルを使用する場合)SUM、2回記述する必要があることはわかっていHAVINGます。 SELECT id, sum(hours) AS totalhours FROM mytable GROUP BY id HAVING sum(hours) > 50; 私の質問は、これが最適ではないかどうかです。プログラマーとして、このクエリは、DBが合計を2回計算するように見えます。そうですか、それともDBエンジンが行う最適化に依存すべきですか? 更新:比較可能なクエリの説明: postgres=> explain select sum(counttodo) from orderline group by orderlineid having sum(counttodo) > 100; QUERY PLAN -------------------------------------------------------------------- HashAggregate (cost=1.31..1.54 rows=18 width=8) Filter: (sum(counttodo) > 100) -> Seq Scan on orderline (cost=0.00..1.18 rows=18 width=8) (3 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.