首页
学习
活动
专区
圈层
工具
发布

问Mysql多表
EN

Stack Overflow用户
提问于 2016-06-12 17:15:02
回答 2查看 30关注 0票数 0

我有五张桌子,其中一张是与订单有关的。

代码语言:javascript
复制
 CREATE TABLE `Prod1` (
  `idProd1` INT NOT NULL,
  `name` VARCHAR(45) NULL,
  `price` INT NULL,
  PRIMARY KEY (`idProd1`));

这是一张桌子的模型。我有五个像这个一样的。

在6,我有外键,所有的主键,从产品表,我想创建一个选择,给我的总支付。

问题是,如果其中一个键为null,则返回所有表中的总计。

这就是我现在要做的。

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

所以我的方法是:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2016-06-13 14:01:24

我利用了亚历克斯的想法,提高了一点。我从我的产品中选择了名字。以同样的方式,ifnull(p1.name,"-")等等,如果id为null,则返回我的名称破折号"-“和价格0。也许它会对某人有帮助。

代码语言:javascript
复制
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.idorder
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37777000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档