プロが教えるわが家の防犯対策術!

前回3つ以上のテーブルの結合に関しての続きです。

お手数ですが再度アドバイスお願いします。

select *
from テーブル1 x,テーブル2 y,テーブル3 z
where
x.店舗コード=y.店舗コード(+) and
x.店舗コード=z.店舗コード(+) and
x.店舗コード in (選択したい店舗のカンマ区切りのリスト)

この結果を実行したのですが
どうやら店舗コードが複数行(実際には2行)抽出されてしまいました。

そこでgrpup句を使用してみましたがエラーになってしまいました。

結合ではグループ化はできないのでしょうか?

大変お手数ですが対処法を教えて頂けますでしょうか。

また、補足でお願いできましたら
上記のSQL句の(+)とは何を意味しているのでしょうか?
私の所有している参考書の結合の箇所には
そういった記述がありませんでした。

お手数ですがよろしくお願いします。

A 回答 (2件)

結合後のGROUP BY句でも、文法が正しければ使用できます。


エラーになったSQLを提示してもらわないと、これ以上はなにも言えません。

(+)の表記は、外結合を表します。(+)を付加しない場合は、内結合になります。
参考書は、なにを使用されているのでしょうか?
ORACLEに特化したものであれば、記載があると思いますが、
標準SQL規格には含まれていないので、
汎用的な参考書だと記載されていないかもしれません。

あえて、(+)のような表記を使わず
「LEFT OUTER JOIN」、「INNER JOIN」のような標準SQLでの
記述と、それぞれの意味を勉強された方が良いかと思います。
    • good
    • 0

(+)は、今回の場合だと


・「テーブル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;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!