Vermeidung von kartesischen Produkt mit Inner Joins

Ich weiß, dies wurde gebeten vor, aber ich habe Schwierigkeiten beim greifen. Ich habe selten verwenden Sie raw-SQL.

Ich habe drei Tabellen - Session, GroupName und GroupSessionFeedback.

Ich bin bei Session zu GroupFeedback auf idUser
und ich bin bei GroupName zu Session auf idGroup Spalte.

Hier ist mein SQL code:

SELECT s.idSession, 
       g.name, 
       s.Assistant, 
       s.idGroup, 
       s.start, 
       s.end, 
       f.value
  FROM rempad.Session s
 INNER JOIN rempad.GroupSessionFeedback f
    ON s.idUser = f.idUser
 INNER JOIN rempad.GroupName g
    ON s.idGroup = g.idGroup
 WHERE s.start BETWEEN '2013-04-28' AND '2013-05-28'
   AND s.idUser = 22
    OR s.idUser = 23
    OR s.idUser = 24
    OR s.idUser = 26
    OR s.idUser = 27
    OR s.idUser = 28
    OR s.idUser = 42;

Ich soll es zurück zu bringen einzigartige idSessions aber es passt ihn mehrere Male, weil der Joins und ich habe nicht wirklich eine Idee, was anderen Ansatz zu nehmen. Könnte ich machen, eigene Aufrufe des Datenbank - aber ich versuche es wirklich zu vermeiden, hämmern die Datenbank als ziemlich langsame Reaktion, wie es ist.

Irgendwelche Ideen?

Vielen Dank im Voraus

Zwei Punkte: mischen Sie ands und ors. And hat Vorrang vor or, was in start filter, geehrt für iduser 22 nur. Andere Benutzer werden einfach angehängt zu führen. Siehe Mysql oder/und Vorrang?. Verwenden in oder schließen Sie alle ors in Klammern. Zweiter Punkt: wenn die Leistung nicht verbessern, dann müssen Sie wahrscheinlich zu überdenken, Indizes.

InformationsquelleAutor Linda Keating | 2013-08-31

Schreibe einen Kommentar