【发布时间】:2019-05-06 22:19:23
【问题描述】:
我正在尝试为在特定日期范围内具有 onlineorderid 的所有订单提取付款信息,该信息位于不同的表格中。但是我得到了不一致的结果以及很多重复。
我尝试在 tblpayments 和 tblorders 之间执行简单的连接,但没有成功。我认为问题在于 tblpayments 与 tblorders 具有一对多的关系,因为同一个 orderid 上可以有多个付款。请记住,这是 MYSql 5.6
这是我尝试过但最终不起作用的查询。
SELECT
pmtorderid,
pmtorderdate AS 'Date',
pmtamt,
pmtchgtip,
pmtident1,
o.ordonlineorderid
FROM
tblorders o
LEFT OUTER JOIN
tblpayments p ON p.pmtorderid = o.orderid
WHERE
pmttype = 3
AND o.ordonlineorderid IS NOT NULL
AND DATE(PmtOrderDate) BETWEEN '2019-04-22' AND '2019-04-30'
GROUP BY PmtOrderID , PmtOrderDate
当我使用下面的 WHERE 子句查询 tblorders 时,我得到了大约 70 多条记录,这是准确的,但是当我将此子句与 JOIN 一起使用时,我得到了数千条我知道不正确的记录。
WHERE pmttype = 3
AND o.ordonlineorderid IS NOT NULL
AND DATE(PmtOrderDate) BETWEEN '2019-04-22' AND '2019-04-30'
【问题讨论】:
-
GROUP BY在您的查询中的用途是什么? -
在 where 子句中的
PmtOrderDate不应该是pmtorderdate吗?大小写对于列名很重要。 -
谷歌如何使用
GROUP BY。它在这里毫无用处。 -
我只是出于好奇才添加它,因为我的原始查询产生了数千条记录。使用 group by 将其减少到几百个,这仍然是错误的,但我保持原样,因为如果这是有道理的,它的错误会稍微少一些,而且我不确定当时还能尝试什么。对我来说可能是一个糟糕的决定,对此感到抱歉。