2011-08-08 11 views
3

は3つのテーブルを結合するか、私は3つのテーブルを持っているは、3つのテーブルを結合するか、

OracleでネストされたSQLを実行するOracleでネストされたSQL文を実行します。腸、posとCFG

腸およびposが価値を共有し、缶に参加します gut.gut_val= pos.pos_valで作成する必要があります。

同様に、cfgテーブルとposテーブルは値を共有し、次のようにして結合することができます。cfg.cfg_dev_cot = pos.pos_dev_val

ただし、cfgとgutは値を共有しません。 gut_val = pos_valcfg_dev_cot = pos_dev_valのとき、gut_cou、pos_mon_runch、およびcfg_cfg_couの値を表示します。ジョインでこれを行う方法はありますか、ネストしたSQL文を実行するのが最善でしょうか?

私が試したことは次のとおりですが、オラクルエラーが発生します。スタートのために

select gut.gut_cou, pos.pos_mon_runch, cfg.cfg_cou 
from gut,pos,cfg 
where gut.gut_val = pos.pos_val 
and cfg.cfg_dev_cot = pos.pos_dev_val 
and pos.POS_CIT='12345654' 
and gut.gut_DAT_DEB <= '08-AUG-11' 
and gut.gut_DAT_FIN >= '08-AUG-11' 
and gut.gut_TCV ='BOU' 
+3

ケア:

は、以下のことを試してみてください? :) – MatBailie

答えて

5

、これまで誰-または何-everが参加するため,表記を使用することができ教えを取り除きます。代わりに、次のようなものを使用してください。

これはあなたのエラーメッセージを取り除くことはできませんが、あなたはエラーが何であるかを私たちに語っていない。)

SELECT 
    gut.gut_cou, 
    pos.pos_mon_ruch, 
    cfg.cfg_cou 
FROM 
    gut 
INNER JOIN 
    pos 
    ON pos.pos_val = gut.gut_val 
INNER JOIN 
    cfg 
    ON cfg.cfg_dev_cot = pos.pos_dev_val 
WHERE 
    pos.POS_CIT='12345654' 
AND gut.gut_DAT_DEB <= '08-AUG-11' 
AND gut.gut_DAT_FIN >= '08-AUG-11' 
AND gut.gut_TCV ='BOU' 
3

私は

and gut.gut_DAT_DEB <= '08-AUG-11' 
and gut.gut_DAT_FIN >= '08-AUG-11' 

を使用して回避し、明示的なのために行くだろうフォーマットマスクと4桁の年を使用した変換

and gut.gut_DAT_DEB <= TO_DATE('08-AUG-2011','DD-MON-YYYY') 
and gut.gut_DAT_FIN >= TO_DATE('08-AUG-2011','DD-MON-YYYY') 

また、あなたがwanyかもしれないので、

and gut.gut_DAT_DEB <= TO_DATE('08-AUG-2011 23:59:59','DD-MON-YYYY HH24:MI:SS') 
0

3つのテーブルすべてがすべてのデータを共有していない場合は、選択した行が返されません。エラーメッセージが何であるかを共有すること

SELECT g.gut_cou, p.pos_mon_runch, c.cfg_cou 
    FROM gut g, pos p 
    LEFT OUTER JOIN cfg c ON c.cfg_dev_cot = p.pos_dev_val 
WHERE g.gut_val = p.pos_val 
    AND p.POS_CIT='12345654' 
    AND trunc(g.gut_DAT_DEB, 'DDD') <= TO_DATE('08-AUG-11','DD-MON-YY') 
    AND trunc(g.gut_DAT_FIN, 'DDD') >= TO_DATE('08-AUG-11','DD-MON-YY') 
    AND g.gut_TCV ='BOU' 
関連する問題