LEFT JOIN 在多个表上出错! (Table 或视图不存在)
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 ) )
我现在的问题是:
如您所见,我在同一个 table 上进行了多个左连接。我总是收到错误消息 "Table or view does not exist" (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 子句)和 "modern"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) "modern" 是相对的:在 25 年多以前的 1992 年 SQL 标准中引入了显式 JOIN。所以这几乎不是 "brand new" 意义上的 "modern"。
我有以下 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 ) )
我现在的问题是: 如您所见,我在同一个 table 上进行了多个左连接。我总是收到错误消息 "Table or view does not exist" (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 子句)和 "modern"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) "modern" 是相对的:在 25 年多以前的 1992 年 SQL 标准中引入了显式 JOIN。所以这几乎不是 "brand new" 意义上的 "modern"。