我有五张桌子,其中一张是与订单有关的。
CREATE TABLE `Prod1` (
`idProd1` INT NOT NULL,
`name` VARCHAR(45) NULL,
`price` INT NULL,
PRIMARY KEY (`idProd1`));这是一张桌子的模型。我有五个像这个一样的。
在6,我有外键,所有的主键,从产品表,我想创建一个选择,给我的总支付。
问题是,如果其中一个键为null,则返回所有表中的总计。
这就是我现在要做的。
select p1.idprod1,p2.idprod2,p3.idprod3,p4.idprod4,p5.idprod5, sum(p1.idprod1+p2.idprod2+p3.idprod3+p4.idprod4+p5.idprod5)
from prod1 p1,prod2 p2,prod3 p3,prod4 p4,prod5 p5,order o
where p1.idprod1=o.iprod1 and p2.idprod2=o.idprod2 and p3.idprod3=o.idprod3 and p4.idprod=o.idprod4 and p5.idprod5=o.idprod5 and
o.idorder=(select max(idorder) from order);发布于 2016-06-12 17:28:14
既然您有where p1.idprod1=o.iprod1 and p2.idprod2=o.idprod2 and p3.idprod3=o.idprod3 and p4.idprod=o.idprod4 and p5.idprod5=o.idprod5,我看不出有什么理由返回p1.idprod1,p2.idprod2,p3.idprod3,p4.idprod4,p5.idprod5。
其他注意:sum(p1.idprod1+p2.idprod2+p3.idprod3+p4.idprod4+p5.idprod5)的原因是什么?
我认为唯一可以SUM的列是price。
所以我的方法是:
SELECT
o.*,
sum(p1.price+p2.price+p3.price+p4.price+p5.price)
FROM order o
LEFT JOIN prod1 p1
ON p1.idprod1=o.iprod1
LEFT JOIN prod2 p2
p2.idprod2=o.idprod2
LEFT JOIN prod3 p3
ON p3.idprod3=o.idprod3
LEFT JOIN prod4 p4
ON p4.idprod=o.idprod4
LEFT JOIN prod5 p5
ON p5.idprod5=o.idprod5
WHERE o.idorder=(select max(idorder) from order)
GROUP BY o.idorder发布于 2016-06-13 14:01:24
我利用了亚历克斯的想法,提高了一点。我从我的产品中选择了名字。以同样的方式,ifnull(p1.name,"-")等等,如果id为null,则返回我的名称破折号"-“和价格0。也许它会对某人有帮助。
SELECT
o.*,
sum(ifnull(p1.price,0)+ifnull(p2.price,0)+
ifnull(p3.price,0)+ifnull(p4.price,0)+ifnull(p5.price,0))
FROM order o
LEFT JOIN prod1 p1
ON p1.idprod1=o.iprod1
LEFT JOIN prod2 p2
p2.idprod2=o.idprod2
LEFT JOIN prod3 p3
ON p3.idprod3=o.idprod3
LEFT JOIN prod4 p4
ON p4.idprod=o.idprod4
LEFT JOIN prod5 p5
ON p5.idprod5=o.idprod5
WHERE o.idorder=(select max(idorder) from order)
GROUP BY o.idorderhttps://stackoverflow.com/questions/37777000
复制相似问题