SQL Serverのネストされたselectステートメント


388

次の方法でうまくいかないのはなぜですか?

SELECT name FROM (SELECT name FROM agentinformation)

SQLについての私の理解は間違っていると思います。これは、

SELECT name FROM agentinformation

内側のSELECTステートメントは、外側のSELECTステートメントがクエリする結果セットを作成しませんか?

回答:


673

サブクエリにエイリアスを設定する必要があります。

SELECT name FROM (SELECT name FROM agentinformation) a  

またはより明確にする

SELECT a.name FROM (SELECT name FROM agentinformation) a  

76
エイリアスもある程度冗長であることを確認してください!私はt1、t2、t3、t4、t5、t6を使用してwueryで作業するようになると大好きです
Doug Chamberlain

2
where句は外部クエリにどこに行きますか?
大佐パニック

3
@ColonelPanic:外部クエリのWHERE句は、最後に追加されます。
Joe Stefanelli、

「そうです、私はばかです!ありがとう、許可されたら受け入れます。」いや。ただ無知。みんなのように。
Lucio Mollinedo

2
Oracleは、selectエイリアスなしで最初のものを受け入れます。
Kjetil S.

49

答えジョー・ステファネリにより提供はすでに正しいです。

SELECT name FROM (SELECT name FROM agentinformation) as a  

クエリにはサブクエリのエイリアスを作成することから取得するテーブルオブジェクトが必要なので、サブクエリのエイリアスを作成する必要があります。概念的には、サブクエリの結果は外部クエリに代入されます。外部クエリにはテーブルオブジェクトが必要なので、内部クエリのエイリアスを作成する必要があります。

サブクエリを含むステートメントは通常、次のいずれかの形式を取ります。

  • WHERE式[NOT] IN(サブクエリ)
  • WHERE式compare_operator [ANY | ALL](サブクエリ)
  • WHERE [NOT] EXISTS(サブクエリ)

その他のサブクエリルールサブクエリタイプを確認します

ネストされたサブクエリのその他の例

  1. IN / NOT IN –この演算子は、内部クエリが実行された後、内部クエリの出力を取得します。これは、0以上の値であり、外部クエリに送信されます。次に、外部クエリは、一致するすべての[IN演算子]行または一致しない[NOT IN演算子]行をフェッチします。

  2. ANY – [> ANYまたはANY演算子は、内部クエリによって生成された値のリストを取得し、リストの最小値より大きいすべての値をフェッチします。の

例> ANY(100,200,300)、ANY演算子は100より大きいすべての値をフェッチします。

  1. ALL – [> ALLまたはALL演算子は、内部クエリによって生成された値のリストを取得し、リストの最大値より大きいすべての値をフェッチします。の

例> ALL(100,200,300)、ALL演算子は300より大きいすべての値をフェッチします。

  1. EXISTS – EXISTSキーワードはブール値[TRUE / FALSE]を生成します。このEXISTSは、サブクエリによって返された行の存在を確認します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.