繁体   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