アプリ版:「スタンプのみでお礼する」機能のリリースについて

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を生成してくれるツールとかありましたら紹介してください。

A 回答 (4件)

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



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/24 21:36

>自動でSQLを生成してくれるツールとかありましたら紹介してください。


  完全に自動というわけではないですが、
  『KeySQL』という製品なら、GUIで項目や条件を選べば、
  SQL文ができあがりますよ。

参考URL:http://www.oracle.co.jp/keysql/index.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/04 22:20

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等せず、古い記述方法で。
あえて古い記述方法を用いる意味は?
    • good
    • 0

テーブル名を別名(エイリアス)で表記。


あえて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に存在しないコードがあっても表示。

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

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

関連するカテゴリからQ&Aを探す