こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Oracleでテーブルの結合について

SQL初心者です。結合について質問させていただきます。
使用するテーブル
(1) 顧客テーブル
(2) 取引先テーブル

カラム
顧客TBL      取引先TBL
顧客CD       取引先CD
仕入先CD      取引先名称
             仕入先名称
  :         :

とあるとします。抽出したい情報は、
(1) 顧客TBL.顧客CD  = 取引先TBL.取引先CD を条件に取引先TBL.取引先名称
(2) 顧客TBL.仕入先CD = 取引先TBL.取引先CD を条件に取引先TBL.取引先名称

自分が書いたSQL文

SELECT
顧客CD,
仕入先CD,
取引先名称,
(SELECT 仕入先名称 FORM 取引先TBL WHERE 顧客TBL.仕入先CD = 取引先TBL.取引先CD AND ROWNUM=1) AS 仕入先名称
FORM
顧客TBL LEFT JOIN 取引先TBL ON 顧客TBL.顧客CD = 取引先TBL.取引先CD


これで一応データの取得はできています。
副問合せを使わずに取引先名称と仕入先名称を取得する書き方はあるのでしょうか?
後、自動でSQLを生成してくれるツールとかありましたら紹介してください。

投稿日時 - 2006-08-19 16:16:23

QNo.2349114

すぐに回答ほしいです

質問者が選んだベストアンサー

ちょっと間違っているので訂正。

SELECT
DISTINCT
顧客CD,
仕入先CD,
X.取引先名称,
Y.仕入先名称
FORM
顧客TBL
LEFT JOIN 取引先TBL X ON 顧客TBL.顧客CD = X.取引先CD
LEFT JOIN 取引先TBL Y ON 顧客TBL.仕入先CD = Y.取引先CD

投稿日時 - 2006-08-21 12:32:20

お礼

お礼が遅れてすいません。
回答いただいた通りに記述しました。うまい事取得する事ができました。
ありがとうございました。

投稿日時 - 2006-08-24 21:36:17

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>自動でSQLを生成してくれるツールとかありましたら紹介してください。
  完全に自動というわけではないですが、
  『KeySQL』という製品なら、GUIで項目や条件を選べば、
  SQL文ができあがりますよ。

参考URL:http://www.oracle.co.jp/keysql/index.html

投稿日時 - 2006-08-26 14:10:53

お礼

ありがとうございます。
早速ためしてみます。

投稿日時 - 2006-09-04 22:20:54

SELECT
DISTINCT
顧客CD,
仕入先CD,
取引先名称,
仕入先名称
FORM
顧客TBL
LEFT JOIN 取引先TBL X ON 顧客TBL.顧客CD = X.取引先CD
LEFT JOIN 取引先TBL Y ON 顧客TBL.仕入先CD = Y.取引先CD

で良いのではないかと思います。

ちなみに・・
>#1どの
>あえてInnerJoin等せず、古い記述方法で。
あえて古い記述方法を用いる意味は?

投稿日時 - 2006-08-21 12:30:43

ANo.1

テーブル名を別名(エイリアス)で表記。
あえてInnerJoin等せず、古い記述方法で。

SELECT
 a.顧客CD, b.取引先名称,
 a.仕入先CD, c.仕入先名称
from
 顧客TBL as a,
 取引先TBL as b,
 取引先TBL as c
where
 a.顧客CD = b.取引先CD(+)
 and
 a.仕入先CD = c.取引先CD(+)
;


(+)はLeftJoinと同じ。取引先TBLに存在しないコードがあっても表示。

ツールは、わかりません。ごめんなさい。

投稿日時 - 2006-08-19 17:50:27

あなたにオススメの質問