首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL几个内部联接导致错误和结果

SQL几个内部联接导致错误和结果
EN

Stack Overflow用户
提问于 2016-05-22 16:52:21
回答 2查看 680关注 0票数 4

我的数据库的一个例子:(底部的SQLFiddle链接)

我有几张桌子:

登录

  1. User_ID (int)
  2. 电子邮件(varchar)
  3. 马尾草
  4. 申购ID

业务

  1. ID_Login_ID_Business (int)
  2. NameOfCompany (varchar)
  3. NameContact(varchhar)
  4. ID_Location_FK (int)
  5. ID_BalancesheetInput_FK (int)
  6. ID_Balancesheetoutput(int)

ID_BalancesheetInput

  1. ID
  2. FK_Business_ID (int)
  3. RessourceName (varchar50)
  4. 数额(小数)
  5. Unit_Fk (int)
  6. TypeOfRessource_FK(int)

单元

  1. Unit_id
  2. 单元

TypeOfRessource

  1. ID_Type
  2. 类型

Sql应该检查来自Buisness的所有条目,其中ID_Login_ID_Business(fk)等于BalancesheetInput中的FK_Business_ID,所有金额之和都是相同的RessourceNam,e,并且应该简单地添加检查正确单位的typeofRessource。

示例:

业务

ID,NameOfCompany,ID_BalancesheetInput_FK

  • 1苹果-1
  • 2 Minisoft 2

BalancesheetInput

ID,FK_Business_ID,RessourceName,Amount,Unit_FK,TypeOFRessource_FK

  • 1,1,电力,100,3,2
  • 2,1,热能,200,3,2
  • 3,1,热能,150,3,2
  • 4,1,轻质燃料油,10,3,2
  • 5,1,螺钉,200,3,2
  • 6,1,水,200,4,3

单元

单位ID,单位

  • 1 .件
  • 2吨
  • 3,kWh
  • 4平方米
  • 5升

TypeOFRessource

ID_Type,类型

  • 1,资产
  • 2,Energie
  • 3 .材料

下面的语句试图捕获所选业务的资源并计算同名的条目,例如电能。他们属于一个公司,但出了问题。

每次我使用sql语句时:

代码语言:javascript
复制
"SELECT DISTINCT "
           . "BalancesheetInput.RessourceName AS Rn, "
           . "Units.Unit AS En, "
           . "SUM(BalancesheetInput.Amount) AS TotalAmount "
           . "FROM Business"
           . "INNER JOIN BalancesheetInput ON FK_Business_ID = 1 "
           . "INNER JOIN Units ON Unit_FK = Unit_ID "
           . "INNER JOIN TypeOfRessource ON TypeOf Ressources = 2 "
           . "GROUP BY BalancesheetInput.RessourceName ");

结果

轻质燃料油60 kWh能源600 kWh能源热能2100 kWh

看起来他增加了每一行的6倍。

我想要的结果:

轻质燃料油10 kWh能源-电力100 kWh能源-热能350 kWh

这是一个SQLFiddle提供了所有这些的工作版本。

如果你需要更多的信息,就说出你需要帮助我解决问题的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-22 18:14:32

我和Luk风暴得出了同样的答案,这是我做的SQLFiddle

提示:如果您在JOIN上选择*,您将发现它正在为每个看见创建一个包含六行的表;为每个公司名称和能源类型的组合创建一个表。我们用什么地方缩小重复行的范围。这通常比选择不同的要好。

此外,“螺丝”被错误地归类为"Energie“而不是"Materiel”。

票数 2
EN

Stack Overflow用户

发布于 2016-05-22 17:54:19

它有助于为表使用别名。还可以在字段上创建适当的联接,而不是连接应该在where子句中的值。

最好确保GROUP拥有在select中使用的所有字段(忽略函数中使用的字段)。

特别是在使用MySql时。

代码语言:javascript
复制
SELECT  
bs.RessourceName AS Rn, 
u.Unit AS En, 
SUM(bs.Amount) AS TotalAmount 
FROM Business b
INNER JOIN BalancesheetInput bs ON bs.FK_Business_ID = b.ID
INNER JOIN Units u ON u.Unit_ID = bs.Unit_FK
INNER JOIN TypeOfRessource t ON t.ID_Type = bs.TypeOFRessource_FK
WHERE b.NameOfCompany = 'Apples' 
AND bs.RessourceName = 'electricity'
GROUP BY bs.RessourceName, u.Unit
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37377040

复制
相关文章

相似问题

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