2016-07-30 2 views
0

I 3 bekam verschiedene TabellenSQL Query Wählen Sie vier Einträge aus drei Tabellen, wenn zwei Einträge sind gleich

1. Table Business 
ID, Name, fk_Input, fk_Output 

2. Table Input 
Id, FK_Business_id, Name 

3. 
Id, FK_Business_id, Name 

ich eine Datenbank Beispiel auf SQLFiddle erstellt.

Jetzt möchte nur überprüfen, welche Business hat die gleiche output.name wie ein anderes Business hat als Input.name und als Ergebnis sowohl Business-Namen und welche Ressource kann geteilt werden.

So ein Beispiel für ein besseres Verständnis sollten

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 

Ergebnis sein:

AdventureA has Power for BusinessB 
CompanyC has Power for BusinessB 

oder mit anderen Worten, wie dieser

BusinessnameOutput, BusinessnameInput, NameInput, NameOutput 

I

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

Aber führt zu viele Zeilen ohne Sinn

auch versucht

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 

aber ergibt keine Einträge.

Abfrage mit fast dem richtigen Ergebnis war

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

Aber es zeigt nur einen Businessnamen statt beiden businessnames weichen die gleiche Ausgabe wie ein Eingang hat.

Keine Ahnung, wie ich dieses Dilemma lösen kann? Jeder hat eine Idee, das wäre großartig.

Antwort

1

können Sie innere verwenden beitreten und ordnungsgemäßem Zustand für beitreten

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

Ich denke, das funktioniert. Vielen Dank. Ich habe eine entre Abfrage nicht zeigen, aber ich denke, es wäre ein Fehler in der Datenbank. Ich habe deine Frage mit einem neuen Beispiel getestet, das ich in die Datenbank einfüge, und es zeigt das Ergebnis, wie ich es möchte. Danke, das ist großartig. :) – Sires