Php SQL链接三个表并求和
我有三张桌子,tblPresents,tblPresentsOrdered和tblPresentsDelivered 我想做的是汇总给定当前ID的所有订单和交付,这样我就可以汇总订单和交付的总数,并检查差异 到目前为止,我有以下几点:Php SQL链接三个表并求和,php,sql,Php,Sql,我有三张桌子,tblPresents,tblPresentsOrdered和tblPresentsDelivered 我想做的是汇总给定当前ID的所有订单和交付,这样我就可以汇总订单和交付的总数,并检查差异 到目前为止,我有以下几点: $sql ='SELECT prsName, SUM(ordQuantity) AS qtyOrdered, SUM(delQuantity) AS qtyDelivered FROM tblPresentOrders LEFT JOIN tblPresentDe
$sql ='SELECT prsName, SUM(ordQuantity) AS qtyOrdered,
SUM(delQuantity) AS qtyDelivered
FROM tblPresentOrders
LEFT JOIN tblPresentDeliveries
ON tblPresentDeliveries.delPresent = tblPresentOrders.ordPresent
RIGHT JOIN tblPresents ON tblPresents.prsID = tblPresentOrders.ordPresent
GROUP BY prsName';
第一列(已订购)汇总正确,但交付量将计算两次交付量(该行有两个单独的订单)
我做错了什么?因为每次交付可以有多个订单(并且每个订单可能有多个礼物),所以在加入之前,您需要在派生表中执行聚合,以避免计数/求和值重复。请注意,在同一个查询中混合使用
左连接
和右连接
可能有点难以理解,因此我仅使用左连接
s重写了查询
SELECT p.prsName, o.qtyOrdered, d.qtyDelivered
FROM tblPresents p
LEFT JOIN (SELECT ordPresent, SUM(ordQuantity) AS qtyOrdered
FROM tblPresentOrders
GROUP BY ordPresent) o ON o.ordPresent = p.prsID
LEFT JOIN (SELECT delPresent, SUM(delQuantity) AS qtyDelivered
FROM tblPresentDeliveries
GROUP BY delPresent) d ON d.delPresent = p.prsID
在不查看数据的情况下,我猜测每个
ordPresent
都有多个delPresent
。是一对一吗?是一对多,一个礼物可能有多个订单和交付,但目前“订单”表中有两个记录,而“交付”表中只有一个记录。每次交付是否有一个订单,反之亦然?不一定。有时我们有加满的订单或送货单,效果很好,我想我明白为什么。只有一个问题,TBLPP的目的是什么?只是一个简写,还是它实际上意味着什么?当我没有这样做就尝试时,它抛出了一个SQL错误。@ChrisCtblPresents p
(也可以写为tblPresents as p
)将p
设置为tblPresents
的别名,这只会缩短其余查询的编写时间。它是完全可选的,我发现它有助于可读性。