[英]MySQL statement that combines a sub-query and a JOIN is not working
SELECT i.id AS id, i.modify_date as modify_date, s.subscription as subscriptionid, p.paid/i.total AS paidratio
FROM invoices i,
(SELECT p.invoice, sum(amount) AS paid FROM payments p GROUP BY p.invoice) p
LEFT JOIN sub_to_inv s
ON i.id=s.invoice
WHERE p.invoice=i.id
AND i.corporation='3'
AND i.payer=1
我得到的錯誤是“ i.id上的未知列”,這是偽造的-發票(i)肯定有一個ID行。 他們都做。
sub = query的目的是找出已支付了多少發票。 例如,對於“總計”列為1000.00的發票,可以進行2或3次分期付款。 我最終在這里要做的是首先列出所有未付發票或部分發票。 但是,在進入ORDER BY階段之前,我需要弄清楚這個錯誤。
對所有聯接使用JOIN
語法。 不要將JOIN
語法與逗號樣式的SQL-89語法混合使用。
SELECT ...
FROM invoices i
INNER JOIN (SELECT...) p
ON p.invoice=i.id
LEFT OUTER JOIN sub_to_inv s
ON i.id=s.invoice
WHERE
AND i.corporation='3'
AND i.payer=1
說明: JOIN
優先級高於逗號聯接。 因此,在查詢評估與i
p JOIN s
之前,先評估p JOIN s
。 因此,在子句ON i.id=s.invoice
, i
表尚不清楚,並且是無效的引用。
請參閱http://dev.mysql.com/doc/refman/5.1/en/join.html中的“ MySQL 5.0.12中的聯接處理更改”之后的文檔。
你可以試試這個嗎?
SELECT i.id AS id, i.modify_date as modify_date, s.subscription as subscriptionid, p.paid/i.total AS paidratio
FROM invoices i
LEFT JOIN
(SELECT p.invoice, sum(amount) AS paid FROM payments p GROUP BY p.invoice) p
ON p.invoice=i.id
LEFT JOIN sub_to_inv s
ON i.id=s.invoice
WHERE i.corporation='3'
AND i.payer=1
我認為您可能會遇到問題,因為您的表在SQL中的連接順序。 您是否嘗試過使用內部聯接。 也許嘗試:
SELECT
i.id AS id,
i.modify_date as modify_date,
s.subscription as subscriptionid,
p.paid/i.total AS paidratio
FROM
invoices i
INNER JOIN
(SELECT
p.invoice,
sum(amount) AS paid
FROM
payments p
GROUP BY
p.invoice) p
ON
p.invoice=i.id
LEFT JOIN
sub_to_inv s
ON
i.id=s.invoice
WHERE
i.corporation='3' AND i.payer=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.