- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-10-27 10:26
■Oracle10g
Oracle の以下のようなテーブルがあります。
| コード: |
|
会員テーブル
会員番号 VARCHAR2(10)
カード番号 NUMBER
顧客テーブル
会員番号 VARCHAR2(10)
カード番号 NUMBER
利用者名 VARCHAR2(50)
|
データとして、以下のようなデータが入っているとします。
| コード: |
|
会員テーブル
11111,1
11111,2
11111,3
11111,4
11111,5
顧客テーブル
11111,1,太郎
11111,3,次郎
11111,5,三郎
|
で、以下のような結果を取得したいと思っています。
| コード: |
|
11111,1,太郎
11111,2,NULL
11111,3,次郎
11111,4,NULL
11111,5,三郎
|
そこで、
| コード: |
|
select A.会員番号,A.カード番号,B.利用者名 from 会員テーブル A,顧客テーブル B
where A.会員番号 = '11111' and A.会員番号 = B.会員番号
and A.カード番号 (+)= B.カード番号;
|
という外部結合でいけると思っていましたが、実行すると顧客テーブルに存在するデータしか取得できない感じです。
何か単純な間違いをしているのでしょうか?
ご教示の程、よろしくお願い致します。
|
- 想馬
- 大ベテラン
- 会議室デビュー日: 2003/05/29
- 投稿数: 245
- お住まい・勤務地: 神奈川・東京
|
投稿日時: 2006-10-27 10:31
外部結合なのでouter joinを使うと思います。
http://www.seshop.com/se/edu/shikaku/omo/miti/silver_miti26.asp?educat=silver2
_________________ 己への戒め
「活動的な馬鹿より恐ろしいものはない」 by ゲーテ
|
- かずくん
- ぬし
- 会議室デビュー日: 2003/01/08
- 投稿数: 759
- お住まい・勤務地: 太陽系第三惑星
|
投稿日時: 2006-10-27 10:36
| 引用: |
|
ひろれいさんの書き込み (2006-10-27 10:26) より:
| コード: |
|
select A.会員番号,A.カード番号,B.利用者名 from 会員テーブル A,顧客テーブル B
where A.会員番号 = '11111' and A.会員番号 = B.会員番号
and A.カード番号 (+)= B.カード番号;
|
|
これを、
| コード: |
|
select A.会員番号,A.カード番号,B.利用者名 from 会員テーブル A,顧客テーブル B
where A.会員番号 = '11111' and A.会員番号 (+)= B.会員番号
and A.カード番号 (+)= B.カード番号;
|
としたら、どうだろう。
ちなみに、標準SQLだと
| コード: |
|
select
A.会員番号,A.カード番号,B.利用者名
from
会員テーブル A
left outer join 顧客テーブル B
on A.会員番号 = B.会員番号 and A.カード番号 = B.カード番号
where
A.会員番号 = '11111'
|
かな?
|
- 99ri
- 大ベテラン
- 会議室デビュー日: 2006/09/09
- 投稿数: 129
|
投稿日時: 2006-10-27 10:48
DBMS固有の記述では外部結合の指定がOracleとSQLServerでは逆になります
From テーブルA
outer join テーブルB
Oracle テーブルB.カラム(+)
SQLServer テーブルA.カラム* <===たぶんこういう指定のはず
|
- ぷさいくろう
- ぬし
- 会議室デビュー日: 2006/08/30
- 投稿数: 1034
|
投稿日時: 2006-10-27 10:50
(+)をつける場所がちがうから
慣れないうちは
スカラー問い合わせでやってもよし
|
- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-10-27 10:51
想馬さん、かずくんさん、こんにちは。
| 引用: |
|
かずくんさんの書き込み (2006-10-27 10:36) より:
| 引用: |
|
ひろれいさんの書き込み (2006-10-27 10:26) より:
| コード: |
|
select A.会員番号,A.カード番号,B.利用者名 from 会員テーブル A,顧客テーブル B
where A.会員番号 = '11111' and A.会員番号 = B.会員番号
and A.カード番号 (+)= B.カード番号;
|
|
これを、
| コード: |
|
select A.会員番号,A.カード番号,B.利用者名 from 会員テーブル A,顧客テーブル B
where A.会員番号 = '11111' and A.会員番号 (+)= B.会員番号
and A.カード番号 (+)= B.カード番号;
|
としたら、どうだろう。
ちなみに、標準SQLだと
| コード: |
|
select
A.会員番号,A.カード番号,B.利用者名
from
会員テーブル A
left outer join 顧客テーブル B
on A.会員番号 = B.会員番号 and A.カード番号 = B.カード番号
where
A.会員番号 = '11111'
|
かな?
|
Oracle マスター持ちなのに、お恥ずかしい・・・
結果として、想馬さんご指摘の「OUTER JOIN」を使って出来ました。
SQL だと、かずくんさん提示の標準SQL になりますね。
お二人ともありがとうございました。
でも、「(+)=」を使うと結果が異なるんですよね。どうしてだろ・・・
何か単純な間違いをしているのかな。今日、頭おかしいし(^_^;)
ちなみに、SQL*Plus で確認しました。
|
- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-10-27 10:57
99riさん、ぷさいくろうさん、こんにちは。
| 引用: |
|
ぷさいくろうさんの書き込み (2006-10-27 10:50) より:
(+)をつける場所がちがうから
慣れないうちは
スカラー問い合わせでやってもよし
|
\(◎o◎)/(衝撃!
ホントだ。出来ました。
うろ覚えのまま疑わずにいました。大変申し訳ありません。
調べれば良かった・・・
この恥ずかしいスレ、消したい(^_^;)
|
- ぷさいくろう
- ぬし
- 会議室デビュー日: 2006/08/30
- 投稿数: 1034
|
投稿日時: 2006-10-27 10:59
| コード: |
|
select A.会員番号,A.カード番号,B.利用者名 from 会員テーブル A,顧客テーブル B
where A.会員番号 = '11111' and A.会員番号 (+)= B.会員番号
and A.カード番号 (+)= B.カード番号;
|
としたら、どうだろう。
ちなみに、標準SQLだと
| コード: |
|
select
A.会員番号,A.カード番号,B.利用者名
from
会員テーブル A
left outer join 顧客テーブル B
on A.会員番号 = B.会員番号 and A.カード番号 = B.カード番号
where
A.会員番号 = '11111'
|
かな?
[/quote]
違う違う
(+)をつけるとなくても残すという意味
この場合は
left joinをright joinにすると同じ意味
|