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

Sql 左连接多个表错误!(表或视图不存在),sql,oracle,join,ora-00942,Sql,Oracle,Join,Ora 00942,我有以下SQL语法: SELECT firmenstamm.firmen_id, firmenstamm.firmenname_1, kreditorenstamm.kreditorenname_1, debitor.debitoren_id, debitor.deb_id_vom_kreditor, debitorenstamm.debitorenname_1, zahlung.zahlung_

我有以下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子句和MODEN1 explicit 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多年前,SQL标准在1992年引入了显式连接。因此,从全新的意义上讲,这很难算是现代的。

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

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多年前,SQL标准在1992年引入了显式连接。因此,从全新的意义上讲,这很难算是现代的。

不要混合使用隐式连接和显式连接运算符。使用显式连接运算符编写所有内容Kay我在SQL中不是那么专业:D你能给我一个例子,说明显式和隐式的含义吗?尽量通过alias保持简单,如果可能,使用visual editor。您正在使用数据库的哪个软件。如建议的,不要混合隐式和显式连接样式。但是,问题的实际原因是第一个显式连接条件末尾的逗号:LEFT join z_bankbewegung ON zahlung.zahlungs_id=z_bankbewegung.zahlungs_id,。我提到这一点仅供参考!法兰克福埃因特拉赫-不要混合使用隐式联接和显式联接运算符。使用显式连接运算符编写所有内容Kay我在SQL中不是那么专业:D你能给我一个例子,说明显式和隐式的含义吗?尽量通过alias保持简单,如果可能,使用visual editor。您正在使用数据库的哪个软件。如建议的,不要混合隐式和显式连接样式。但是,问题的实际原因是第一个显式连接条件末尾的逗号:LEFT join z_bankbewegung ON zahlung.zahlungs_id=z_bankbewegung.zahlungs_id,。我提到这一点仅供参考!法兰克福埃因特拉赫-真棒的解释!非常感谢你。我还有一个问题。您之所以将Debitor作为第一个表来编写,或者只是随机编写的,不必关心顺序,这是有原因的吗?@fnr:这是您对账单中的第一个表。对于内部连接,顺序并不重要。优化者将决定连接顺序,但出于可维护性的考虑,仍然值得以某种逻辑顺序编写连接。我也会将所有谓词向前写,例如从b.something=a.something上的连接b开始,而不是像原始版本那样颠倒所有谓词。@WilliamRobertson您能解释一下:正反原始版本示例吗?@NuttyAboutnaty不确定您所说的正对负是什么意思。我想我没有提到任何积极或消极的东西。很棒的解释!非常感谢你。我还有一个问题。您之所以将Debitor作为第一个表来编写,或者只是随机编写的,不必关心顺序,这是有原因的吗?@fnr:这是您对账单中的第一个表。对于内部连接,顺序并不重要。优化者将决定连接顺序,但出于可维护性的考虑,仍然值得以某种逻辑顺序编写连接。我也会将所有谓词向前写,例如从b.something=a.something上的连接b开始,而不是像原始版本那样颠倒所有谓词。@WilliamRobertson您能解释一下:正反原始版本示例吗?@NuttyAboutnaty不确定您所说的正对负是什么意思。我想我没有提到任何积极或消极的东西。