用4个表编写复杂的SQL查询

时间:2015-12-30 00:55:57

标签: php mysql

我有4个表,我想用一个查询输出信息,我不知道该怎么做。

•从table1我想获得所有记录

•对于table1中的每条记录,我想从table1中的所有记录中取出来自field1的SUM来自table1的匹配id

•对于table1中的每条记录,我想从table1中的所有记录中取出来自field1的SUM,该匹配的id取自table1

•对于table1中的每条记录,我想从table4取出一条记录的值,该记录取自table1的匹配id

修改

以下是我认为我的请求的图形应如下所示: enter image description here

这是我的工作代码:

SELECT DISTINCT 
   i.id, 
   i.dateCreated,
   i.dateBilled,
   i.dateCompleted,
   i.userId, 
   i.type, 
   i.status, 
   i.truck, 
   i.poNumber, 
   i.total,
   i.billtoId, 
   i.shiptoId, 
   i.invoiceNumber, 
   i.loadNumber, 
   SUM(p.amount) as amountpaid,
   c.name as billtoName
FROM `invoices` as i
LEFT JOIN `invoice_payments` as p ON i.id = p.invoice
RIGHT JOIN `companies` as c ON c.id = i.billtoId
GROUP BY i.id, i.invoiceNumber

您可以看到我如何通过左连接从我的发票上的所有付款中获得SUM。我正在尝试对i.total执行相同的操作,但是一旦我添加了另一个LEFT JOIN,我的计算结果就会出错,结果会出现amountpaid加倍

1 个答案:

答案 0 :(得分:1)

您可以在SELECT语句中使用子查询编写此查询:

SELECT id, 
(SELECT sum(field1) FROM t2 WHERE t2.idfrom1=t1.id) AS firstSum,
(SELECT sum(field1) FROM t3 WHERE t3.idfrom1=t1.id) AS secondSum,
(SELECT min(field1) FROM t4 WHERE t4.id=t1.f2 LIMIT 1) AS singleRecord
FROM t1

这是一个想法,你只需要根据你的架构进行调整。

编辑:从图纸中更新