【发布时间】:2014-04-01 11:17:25
【问题描述】:
一位客户要求我为他们的报表提取一些额外的会计数据。我在编写一个可以容纳这个的查询时遇到了麻烦。
他们最初想要的是从某个日期范围内获得属于某个帐户的所有“付款”,从最旧的开始排序,这是一个简单的声明,如下所示
SELECT * FROM `payments`
WHERE `sales_invoice_id` = ?
ORDER_BY `created_at` ASC;
但是,现在他们希望将新提出的 “发票” 作为声明的一部分。我似乎无法为此编写正确的查询。联合似乎不起作用,并且 JOINS 的行为就像是连接,所以我无法为每张付款/发票获得单独的行;而是将它们合并在一起。理想情况下,我会按如下方式检索一组结果:
payment.amount | invoice.amount | created_at
-----------------------------------------------------------
NULL | 250.00 | 2014-02-28 8:00:00
120.00 | NULL | 2014-02-28 8:00:00
这样我可以循环遍历这些以生成完整的语句。我尝试的最新查询如下:
SELECT * FROM `payments`
LEFT OUTER JOIN `sales_invoices`
ON `payments`.`account_id` = `sales_invoices`.`account_id`
ORDER BY `created_at` ASC;
第一个问题是 "created_at" 列不明确,所以我不确定如何合并这些。第二个问题是它合并行并带回不正确的重复行。
我是否以错误的方式思考这个问题,或者 MySQL 是否有一个我不知道的功能可以为我做到这一点?谢谢。
【问题讨论】:
标签: mysql sql database join union