gpt4 book ai didi

结合子查询和 JOIN 的 MySQL 语句不起作用

转载 作者:行者123 更新时间:2023-11-29 00:54:11 24 4
gpt4 key购买 nike

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 的优先级高于逗号连接。所以 p JOIN s 在查询评估到 i 的连接之前被评估。因此,在 ON i.id=s.invoice 子句中,i 表是未知的,是一个无效引用。

参见 http://dev.mysql.com/doc/refman/5.1/en/join.html ,在“MySQL 5.0.12 中加入处理更改”之后的文档中。

关于结合子查询和 JOIN 的 MySQL 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com