• 締切済み

結合した表のグルーピングに関して

前回3つ以上のテーブルの結合に関しての続きです。 お手数ですが再度アドバイスお願いします。 select * from テーブル1 x,テーブル2 y,テーブル3 z where x.店舗コード=y.店舗コード(+) and x.店舗コード=z.店舗コード(+) and x.店舗コード in (選択したい店舗のカンマ区切りのリスト) この結果を実行したのですが どうやら店舗コードが複数行(実際には2行)抽出されてしまいました。 そこでgrpup句を使用してみましたがエラーになってしまいました。 結合ではグループ化はできないのでしょうか? 大変お手数ですが対処法を教えて頂けますでしょうか。 また、補足でお願いできましたら 上記のSQL句の(+)とは何を意味しているのでしょうか? 私の所有している参考書の結合の箇所には そういった記述がありませんでした。 お手数ですがよろしくお願いします。

みんなの回答

回答No.2

(+)は、今回の場合だと ・「テーブル1 x」のレコードは全部出す。 ・他のテーブルの列は「テーブル1 x」に 紐付くデータをくっつけて表示 ・もしも紐付くデータが無い時はNULLを表示という意味です。 ↓にコピペでそのまま動作する結合のgroup byを用意したので 参考にして下さい。 --------------------------------- with a as( select '001' as ID,1 as SAL from dual union all select '002',2 from dual union all select '003',3 from dual union all select '004',4 from dual ), b as ( select '001' as ID,1 as SAL from dual union all select '001',1 from dual union all select '003',3 from dual union all select '005',5 from dual ) --↓ここから重要 select b.ID,b.SAL from a,b where a.ID(+) = b.ID group by b.ID,b.SAL;

  • qbr2
  • ベストアンサー率50% (62/123)
回答No.1

結合後のGROUP BY句でも、文法が正しければ使用できます。 エラーになったSQLを提示してもらわないと、これ以上はなにも言えません。 (+)の表記は、外結合を表します。(+)を付加しない場合は、内結合になります。 参考書は、なにを使用されているのでしょうか? ORACLEに特化したものであれば、記載があると思いますが、 標準SQL規格には含まれていないので、 汎用的な参考書だと記載されていないかもしれません。 あえて、(+)のような表記を使わず 「LEFT OUTER JOIN」、「INNER JOIN」のような標準SQLでの 記述と、それぞれの意味を勉強された方が良いかと思います。

関連するQ&A