2016-07-30 17 views
0

我有3页不同的表SQL查询选择四个来自三个表项,如果两个条目都是平等

1. Table Business 
ID, Name, fk_Input, fk_Output 

2. Table Input 
Id, FK_Business_id, Name 

3. 
Id, FK_Business_id, Name 

我创建了一个SQLFiddle数据库的例子。

现在只想检查至极商业有相同的output.name像一些其他商业有Input.name并显示结果商业名称和至极的资源可以共享。

因此,对于更好地理解为例

1. Table Business 
ID, Name, fk_Input, fk_Output 

1, AdventureA, 1,1 
2, BuinsnessB, 2,2 
3, CompanyC, 3,3 

2.Table Input 
Id, FK_Business_id, Name 
1, 1(AdventureA),coal 
2, 1(AdventureA),Air 
3, 2(BusinessB) ,Cooper 
4, 2(BusinessB) ,Power 
5, 3(CompanyC) ,Wood 

3.Table Output 
Id, FK_Business_id, Name 
1, 1(AdventureA), Power 
2, 2(BusinessB) , Cooperbar  
3, 3(CompanyC) , Power 

的结果应该是:

AdventureA has Power for BusinessB 
CompanyC has Power for BusinessB 

或者换句话说,这样的

BusinessnameOutput, BusinessnameInput, NameInput, NameOutput 

我已经试过

SELECT DISTINCT Business.Name, Output.Name, Input.Name FROM Business, Input, Output 
WHERE Output.Name = Input.Name 

但结果得多排,没有任何意义

也试过

SELECT Business.Name, Input.Name, Output.Name 
FROM Unternehmen 
INNER JOIN Input ON Input.FK_Business_id, = Business.ID 
INNER JOIN Output ON Output.FK_Business_id = Business.ID 
WHERE Input.Name = Output.Name 

但在任何项目的结果。

查询几乎正确的结果是

SELECT Business.Name, Input.Name, Output.Name FROM Business,Input, Output WHERE Input.Name = Output.Name GROUP BY Input.RessourceName 

但它仅显示一个BUSINESSNAME,而不是两个businessnames至极具有输出作为输入相同。

不知道我该如何解决这个困境?任何人都有想法,那会很棒。

回答

1

您可以使用内部连接和适当的条件加入

select distinct concat(Business.Name, ' has ', Output.Name, ' for ', Business2.name) 
from Business 
inner join Output on Business.fk_Output = Output.id 
inner join Input on Input.name = Output.name 
inner join Business as Business2 on Input.fk_business_id = Business2.id ; 

http://sqlfiddle.com/#!9/de4efa/6

+0

我认为作品。非常感谢你。我得到了一个entrie查询不会显示,但我认为会有数据库上的错误。我用一个插入数据库的新例子测试了你的查询,它显示了我想要的结果。谢谢你,那很好。 :) – Sires