繁体   English   中英

在多个表上左联接错误! (表或视图不存在)

[英]LEFT JOIN on multiple tables ERROR! (Table or view does not exist)

我有以下SQL语法:

  SELECT firmenstamm.firmen_id,   
     firmenstamm.firmenname_1,   
     kreditorenstamm.kreditorenname_1,   
     debitor.debitoren_id,   
     debitor.deb_id_vom_kreditor,   
     debitorenstamm.debitorenname_1,   
     zahlung.zahlung_nr,   
     zahlung.zahlung_betrag,   
     zahlung.zahlung_betrag_offen,   
     zahlung.zahlung_datum,   
     kreditorenstamm.kreditoren_id,   
     bankbewegung.name_ag,   
     bankbewegung.verwendungzweck  
FROM debitor,   
     debitorenstamm,   
     firmenstamm,   
     kreditorenstamm,   
     zahlung 
     LEFT JOIN z_bankbewegung ON zahlung.zahlungs_id =   z_bankbewegung.zahlungs_id,
     LEFT JOIN bankbewegung ON z_bankbewegung.babe_id = bankbewegung.babe_id

 WHERE ( firmenstamm.firmen_id = kreditorenstamm.firmen_id ) and  
         ( kreditorenstamm.kreditoren_id = debitor.kreditoren_id ) and  
         ( debitor.debitoren_id = debitorenstamm.debitoren_id ) and  
         ( debitor.kreditoren_id = zahlung.kreditoren_id ) and  
         ( debitor.deb_id_vom_kreditor = zahlung.deb_id_vom_kreditor ) and  
         ( ( zahlung.zahlung_betrag_offen > 0 ) )   

我的问题如下:如您所见,我在同一张桌子上进行了多个左联接。 我总是收到错误消息“表或视图不存在”(ORA-00942)。

zahlung 
LEFT JOIN z_bankbewegung ON zahlung.zahlungs_id =   z_bankbewegung.zahlungs_id,
LEFT JOIN bankbewegung ON z_bankbewegung.babe_id = bankbewegung.babe_id

我看不到我的错误。 有人有什么主意吗?

您正在混合使用旧的,古老的和脆弱的隐式联接(在FROM子句中列出所有用逗号分隔的表,然后将联接条件放入WHERE子句中)和“现代” 1)显式JOIN运算符。 不要那样做 对所有内容使用显式JOIN:

SELECT ...
FROM debitor
  JOIN debitorenstamm ON debitor.debitoren_id = debitorenstamm.debitoren_id
  JOIN kreditorenstamm ON kreditorenstamm.kreditoren_id = debitor.kreditoren_id
  JOIN firmenstamm ON firmenstamm.firmen_id = kreditorenstamm.firmen_id
  JOIN zahlung
    ON debitor.kreditoren_id = zahlung.kreditoren_id
   AND debitor.deb_id_vom_kreditor = zahlung.deb_id_vom_kreditor
  LEFT JOIN z_bankbewegung ON zahlung.zahlungs_id = z_bankbewegung.zahlungs_id
  LEFT JOIN bankbewegung ON z_bankbewegung.babe_id = bankbewegung.babe_id
WHERE zahlung.zahlung_betrag_offen > 0

1)“现代”是相对的:25年前,1992年在SQL标准中引入了显式JOIN。 因此,就“全新”而言,这几乎不是“现代”的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM