プロが教える店舗&オフィスのセキュリティ対策術

PL/SQLでビューを作成しているのですが、外部結合がうまくいきません。
CREATE OR REPLACE VIEW USERCOST.VW_KENSAKU_CUST
(CUSTID,TANTOU)
AS
SELECT Y.CUSTID, CD2.CODENM1 AS TANTOU,

FROM T_YOYAKU Y, M_CODE CD2,
(SELECT CUSTID,EDATE,JITUWORKERID

           FROM T_YOYAKU

           WHERE CUSTID || EDATE IN

           (SELECT CUSTID || MAX(EDATE)

           FROM T_YOYAKU

           WHERE TO_DATE(EDATE,'YYYY/MM/DD') <= TO_DATE(SYSDATE,'YYYY/MM/DD')
GROUP BY CUSTID ) 

WHERE
 Y.CUSTID = AL.CUSTID AND
Y.EDATE = AL.EDATE AND
Y.JITUWORKERID = AL.JITUWORKERID AND
CD2.CODEID(+) = '50' AND
CD2.CODENO(+) = Y.JITUWORKERID
/
抽出できないのは CD2.CODENM1です。どなたか知恵を貸して頂けませんでしょうか。お願い致します。                    
  

A 回答 (1件)

どうもこんにちは。


まず、このSQL文ですがどこか抜け落ちているようで
このままだと動作しないのでは?
さて、CD2.CODENM1がうまく抽出できないとのことですが
具体的にどうなるのかがわからないのではっきりとは言え
ませんが、以下の条件から
CD2.CODEID(+) = '50' AND
CD2.CODENO(+) = Y.JITUWORKERID
Yテーブルから CD2テーブルへの外部結合でCODEIDが'50'の
ものを抽出し、その場合にYテーブル側は全件抽出するという
ように読み取れます。
この場合、CODEIDが'50'以外のレコードについてはCD2.CODENM1
がNULLとなってしまうと思います。CODEIDが'50'だけ抽出したい
のであれば CD2.CODEID = '50' でいいかと思います。
あと結合の書き方も Y.JITUWORKERID = CD2.CODENO(+) と外部
結合される側を右辺に持っていった方がいいような気がします。

的外れな回答だったらすみません。(汗)
    • good
    • 0
この回答へのお礼

わざわざ長いソースを読んでくださりどうもありがとうございます。
外部結合はうまくいきました。
原因はテーブルの項目だったようです。

iwazさんの真心に感謝してポイント発行させていただきます。

お礼日時:2001/12/21 16:58

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