2011-08-03 5 views
17
  1. 標準(!)SQLでは次のことが可能ですか?
  2. 標準に準拠させるために必要な最小限の変更(まだない場合)
  3. 最初の行がNumberOfPagesの最大値を持つ場合、MySQLで期待どおりに動作します。

    GROUPなしの場合

    HAVING <search condition>

    • レッツGが<カラム参照によって参照されるすべての列からなる集合である>に含まれている:標準で記述されている以下

      SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)

<グループ句>。
  • 直接<検索条件に含まれる各列参照>以下のいずれかでなければならない:G.
  • 外部参照に機能的に依存している列への明確な参照
  • source

    it should be possibleが標準に従って、なぜ誰かが、私を説明できますか?

    MySQLでは、完全に機能します。

    +0

    あなたは他のどのDBを試していますか?オラクル、MSSQLなど? – Fermin

    答えて

    2

    標準(太字で強調から添加)

    1)からのHCを有する句とします。 TEを直ちにHCを含むテーブル式とする。 TEがすぐにgroup by節を含んでいない場合は、 "GROUP BY()"が暗黙的に指定されます。 TをすぐにTEに含まれるGBCによって定義されるテーブルの の記述子とし、Rを GBCの結果とする。

    暗黙のgroup by句では、外部参照がTE列にアクセスできます。

    しかし、これらの規格に対する認定は、最近の自己証明であり、あなたが与えた例は、主要なRDBMSプロバイダのすべてで機能しません。

    14

    Mimer Validatorの結果にもかかわらず、私はあなたが有効な標準SQLであるとは思わない。

    GROUP BYが付いていない句は、標準SQLで有効で(おそらく)便利な構文です。これはテーブル式で一括して集合として動作するため、言い換えれば集計関数を使用するのは本当に理にかなっています。あなたの例では:、テーブル全体を考慮した場合、行はを参照してくださいNumberOfPagesないそのため

    Book HAVING NumberOfPages = MAX(NumberOfPages) 
    

    は有効ではありませんか?同様に、SELECT句にはリテラル値を使用するだけです。

    は有効な標準SQLである、この例を考えてみましょう:

    SELECT 'T' AS result 
        FROM Book 
    HAVING MIN(NumberOfPages) < MAX(NumberOfPages); 
    

    DISTINCTキーワードの不在にもかかわらず、クエリが複数の行を戻すことはありません。 HAVING句が満たされた場合、結果は値 'T'を含む1つの列を持つ単一の行になります(ページ数が異なる書籍があることを示します)。そうでない場合、結果は空のセットです。カラム。

    私は、句を(論理的に)SELECT句(標準的な振る舞いは別の方法の周り)の後に現れるようにするプロリジナル拡張のために、暗黙のGROUP BY節は他の答えで言及されています。

    関連する問題