- PR -

同じテーブルを2つ使う方法

投稿者投稿内容
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-09-08 18:32
お世話になります。

同じテーブルを2つ使いたいのですが、SQL文のFROM句の
書き方がわかりません。
ご存知の方、宜しくお願い致します。
データベースはORACLEです。

Table_A
  SINSEISHA_NO
  TAISHOSHA_NO

Table_B
  SHAIN_NO
  SHAIN_NAME

Table_AのSINSEISHA_NO=Table_BのSHAIN_NO でSHAIN_NAMEを取得。
Table_AのTAISHOSHA_NO=Table_BのSHAIN_NO でSHAIN_NAMEを取得。

この場合、Table_Bを2つ定義しなければいけないですよね。

すいません。宜しくお願いします。




uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-08 20:02
そういう時は、別名を使います。

select B1.SHAIN_NAME SINSEISHA_NAME, B2.SHAIN_NAME TAISHOSHA_NAME
from Table_A A, Table_B B1, Table_B B2
where A.SINSEISHA_NO=B1.SHAIN_NO
and A.TAISHOSHA_NO=B2.SHAIN_NO

#Oracleのバージョンがわからないので、join句は使っていません
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-09-09 09:52
こんにちは。

Table_A.SINSEISHA_NOで抽出するSHAIN_NAMEと
Table_A.TAISHOSHA_NOで抽出するSHAIN_NAMEを
まとめて抽出する形になりますが、UNIONを使う方法もあります。

コード:
(
SELECT	Table_A.SHAIN_NAME
FROM	Table_A
	Table_B
WHERE	Table_A.SINSEISHA_NO = Table_B.SHAIN_NO 
)
UNION
(
SELECT	Table_A.SHAIN_NAME
FROM	Table_A
	Table_B
WHERE	Table_A.TAISHOSHA_NO = Table_B.SHAIN_NO
);

nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-09-10 09:17
uk様、Qoo様、ありがとうございます。

昨日色々試してみました。

結果、JOINする項目名が同じ名称でないとエラーとなります。
uk様のアドバイスでも、Qoo様のアドバイスでもJOINする左右の
名称が一致していないのに・・・・。

エラー内容
----------------------------------------------------------
制約を有効にできませんでした。1 つ以上の行に、Null か、
一意でないか、または外部キー制約違反の値が含まれています。
----------------------------------------------------------

データベース  :OLACE 9i(9.0.2)
開発環境    :VS.NET2002

テーブルには1行のみで、NOT NULLの項目には値を入れています。
PRIMARY KEYを設定しています。
Table_A側とTable_B側のタイプ、長さも一致させています。

お手数をおかけしますが、どうぞよろしくお願い致します。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-09-10 09:30
引用:

noriさんの書き込み (2004-09-10 09:17) より:
昨日色々試してみました。

(中略)

エラー内容
----------------------------------------------------------
制約を有効にできませんでした。1 つ以上の行に、Null か、
一意でないか、または外部キー制約違反の値が含まれています。
----------------------------------------------------------


色々試したときのSQLを載せて頂けませんか?
(項目名、テーブル名は仮のもので構いません)
その上で「こういうエラーになりました」となればこちら側も指摘しやすいと思います。

#ちなみに、SQLに関するご質問はDatabase Expert 会議室が宜しいかと思います。
_________________
負けないように枯れないように笑って咲く花になろう

[ メッセージ編集済み 編集者: まゆりん 編集日時 2004-09-10 09:32 ]
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-09-10 10:15
まゆりん様、ご指摘ありがとうございます。
わからない事を検索していて、その場で新しいスレッドを
書き込んでしまいました;; (今後、気をつけます)
今回はこのまま質問を続けさせてください。
よろしくおねがい致します。

SELECT
T_KAIRAN.SINSEI_YMD,
T_KAIRAN.SINSEI_NO,
T_KAIRAN.SINSEI_USER,
T_KAIRAN.TAISHO_USER,
T_KAIRAN.CHOHYO_CD,
T_KAIRAN.KAIRAN_NEXT,
T_KAIRAN.KAIRAN_USER_NAME,
T_KAIRAN.KAIRAN_KBN,
T_KAIRAN.GYOMU_TANTO_BUSHO,
T_KAIRAN.STATUS_KBN,
T_KAIRAN.SHONIN_YN_FLG,
T_KAIRAN.END_YMD,
M_CHOHYO.CHOHYO_NAME,
M_STATUS.STATUS_NAME,
SINSEI.SHAIN_NAME SINSEI_NAME,
TAISHO.SHAIN_NAME TAISHO_NAME

FROM
T_KAIRAN,
M_CHOHYO,
M_STATUS,
M_SHAIN SINSEI,
M_SHAIN TAISHO

WHERE
T_KAIRAN.CHOHYO_CD = M_CHOHYO.CHOHYO_CD AND
T_KAIRAN.STATUS_KBN = M_STATUS.STATUS_KBN AND
T_KAIRAN.SINSEI_USER = SINSEI.SHAIN_NO AND
T_KAIRAN.SINSEI_USER = TAISHO.SHAIN_NO

お手数をおかけいたしますが、宜しくお願い致します。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-09-10 10:32
こんにちは。

エラーの発生状況についての確認なのですが、

1.提示されたSQLを(SQL Plus等より発行して)Oracle上で実行させた場合にエラーとなる
のでしょうか?

2.プログラムを作成していて(VB or C#)、DataSet等を用いて処理を行なった際にエラーと
なるのでしょうか?
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-09-10 10:37
お世話になります。

プログラムを作成していてエラーになります。
このSQL文をSQL Plusから発行した場合、
問題なく抽出できます。

宜しくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)