2016-11-12 3 views
-1

Die folgende MySQL-Abfrage sollte zugehörige Anzeige von Datum, Zeit verzeichnen, und die Kapazität des Theaters, das der Film ‚Batman‘ zu zeigen würde.doppelte Ergebnisse in MYSQL Abfrage mit drei Tabellen

select distinct s.Date "Showing Date", s.Time "Showing Time", t.Capacity "capacity" 
from CustomerShowing cs, Showing s, Movie m, Theatre t 
where cs.SID = s.SID and s.MID = m.MID and s.RN = t.RN and m.Name = 'Batman'; 

Die Ergebnisse wie folgt aussehen:

02-11-2016 12:35:00 17  
02-11-2016 09:30:00 5  
02-11-2016 09:30:00 5 //the second result repeated..  
02-11-2016 09:30:00 5 //and repeated again..  
02-11-2016 09:30:00 5 //etc..  
02-11-2016 09:30:00 5 

wenn sie

02-11-2016 12:35:00 17 
02-11-2016 09:30:00 5 

bearbeiten sein sollte: Beachten sie, dass die Abfrage ist in Ordnung bei der Verwendung von verschieden, ich mean't ohne distinct (!!!)

+0

können Sie Gruppe verwenden, indem. Überprüfen Sie die folgende Abfrage. –

+0

Ein Ergebnis ohne Datensatz ist wie ein Stock ohne Lollipop. Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql-query – Strawberry

Antwort

0

Das Problem hierbei ist, dass Sie ein Cross-Join über alle Tabellen tun so sind Sie Duplikate zu bekommen. Verwenden Sie innere Verbindungen

select distinct s.Date "Showing Date", s.Time "Showing Time",  t.Capacity "capacity" 
from CustomerShowing cs 
join Showing s on cs.SID = s.ID 
join Movie m on s.MID = m.MID 
join Theatre t on s.RN = t.RN 
where m.Name = 'Batman'; 
+0

Ich bekomme immer noch die gleichen Ergebnisse, ich habe gerade festgestellt, dass ich eine Version meiner Abfrage mit distinct gepostet habe, also haben die Ergebnisse offensichtlich zwei Zeilen. Ich denke jedoch nicht, dass dies mit verschiedenen Datensätzen übereinstimmt. Ich kann die Frage jetzt nicht wirklich ändern, aber die ursprüngliche Abfrage in meinem Post hat die gleichen Ergebnisse wie die, die Sie gepostet haben. Wenn distinct weggenommen wird, tritt das Problem auf. – AppreciateIt

0

Dies wird Ihr Problem lösen. Hier verwendete eins-zu-eins-Beziehung.

select distinct s.Date as 'Showing Date', s.Time as 'Showing Time', t.Capacity 
as 'capacity' from CustomerShowing cs INNER JOIN Showing s ON cs.SID = s.SID 
INNER JOIN Movie m ON s.MID = m.MID INNER JOIN Theatre t ON s.RN = t.RN WHERE 
m.Name = 'Batman'; 

Es sei denn,

select s.Date "Showing Date", s.Time "Showing Time", t.Capacity "capacity" 
from CustomerShowing cs, Showing s, Movie m, Theatre t 
where cs.SID = s.SID and s.MID = m.MID and s.RN = t.RN and m.Name = 'Batman' 
group by s.Date,s.Time,t.Capacity 
+0

Dies funktioniert ohne distinct. Weil hier eine eins-zu-eins-Beziehung benutzt wurde. –

+0

Ich aktualisierte Abfrage pls überprüfen. –