簡體   English   中英

結合了子查詢和JOIN的MySQL語句不起作用

[英]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.invoicei表尚不清楚,並且是無效的引用。

請參閱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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM