Mysql 从多个表返回数据

Mysql 从多个表返回数据,mysql,sql,inner-join,Mysql,Sql,Inner Join,有人能帮我修复这个SQL查询吗 Select c.name, c.address, c.area, sum(i.amount) from customers c Inner Join invoices i on c.id=i.customer_id Inner Join invoice_payments p on i.id = p.invoice_id group by c.name 这是表格结构 客户表 id(int), Name(string), Area(string), Addr

有人能帮我修复这个SQL查询吗

Select c.name, c.address, c.area, sum(i.amount) from customers c 
Inner Join invoices i on c.id=i.customer_id 
Inner Join invoice_payments p on i.id = p.invoice_id 
group by c.name
这是表格结构

客户表

id(int), Name(string), Area(string), Address(string)
id(int), Invoice_Number (string), customer_id(int), amount(decimal)
发票表

id(int), Name(string), Area(string), Address(string)
id(int), Invoice_Number (string), customer_id(int), amount(decimal)

发票付款

id(int), invoice_id(int), amount(decimal)

我在invoice_payments表中有一个客户的两个付款记录,所以它返回该客户的两倍金额

如何解决这个问题

提供的查询正在返回以下结果。

您根本没有使用
invoice\u payments
表,因此请将其从查询中删除。另外,将
分组方式
固定为在
选择中包含所有未聚合列:

select c.name, c.address, c.area, sum(i.amount)
from customers c join
     invoices i
     on c.id = i.customer_id 
group by c.name, c.address, c.area;

这应该对你有用

Select c.name, c.address, c.area
, sum(i.amount) amount
,SUM(i.amount - p.amount) unpaid_amount 
from customers c 
Inner Join invoices i on c.id=i.customer_id 
Inner Join  (SELECT SUM(amount) amount,invoice_id 
             FROM invoice_payments 
             GROUP BY invoice_id) p on i.id = p.invoice_id 
group by c.name ;
结果是(我将自己的数据a放入customer表中)


分别计算两个总和,并将其相加:

select 
  ci.name, ci.address, ci.area, 
  ci.invoice_amount, cp.invoice_payments_amount 
from (
  select c.id, c.name, c.address, c.area, sum(i.amount) invoice_amount
  from customers c inner join invoices i on c.id = i.customer_id 
  group by c.id, c.name, c.address, c.area
) ci  inner join (
  select c.id, sum(p.amount) invoice_payments_amount 
  from customers c 
  inner join invoices i on c.id = i.customer_id 
  inner join invoice_payments p on i.id = p.invoice_id
  group by c.id
) cp on cp.id = ci.id

样本数据和预期结果将有所帮助。某种db小提琴更好。你可能需要一秒钟的时间来分组column@GordonLinoff我需要的结果是
客户名称、地址、区域、未付金额
<代码>未付金额
等于<代码>发票金额-发票付款金额请在代码问题中给出一个--剪切粘贴和运行代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。这包括您能给出的最少代码,即您显示为OK的代码,由您显示为not OK的代码扩展。(调试基础。)用于包含DBMS/product和DDL的SQL,其中包括约束和索引以及表格格式的基表初始化。PS请通过编辑澄清,而不是评论。这不清楚。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。你甚至连个例子都没有。(猜测:这似乎是一个常见的错误,人们希望某些子查询的某些联接,每个联接可能涉及不同的键,每个子查询可能涉及联接和/或聚合,但他们错误地尝试进行所有联接,然后进行所有聚合或在以前的聚合上进行聚合。)实际上,我想得到发票表和发票付款表中金额的差异。这就是为什么使用发票_payments@JaaZaib . . . 这不是你问的问题。这回答了您提出的问题。若你们有不同的问题,你们应该把它作为一个新问题来问。它从发票表返回双倍的金额。你们有一些样本数据吗?我在图片中添加了样本数据