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
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich das Beispiel auf dieser Seite : SQL Abfrage zurückgeben, Kartesisches Produkt, um es herauszufinden. In fairness, die ich nicht liefern die Struktur der Datenbank in meiner Frage. Aber das problem war, dass in jeder der Tabellen, ich war der Beitritt gab es mehr als eine Spalte, die aufeinander abgestimmt, so ich brauchte, um zu reflektieren, dass in meinem Join-Statements. Hier ist ein Beispiel
Ich hoffe, dies hilft jemand anderes.
L
InformationsquelleAutor Linda Keating
Versuchen Sie es mit dieser:
Ich hoffe das löst es. Jedoch, wenn irgendwelche anderen Filter benötigt, die in dieser Abfrage, erklären Sie mir.
InformationsquelleAutor Rijul
Ist diese version der Abfrage leiden unter dem gleichen problem:
Wenn es noch produziert werden doppelte Ergebnisse, dann was Sie möchten, dass die Zeilen sein? Nachdem alle, dies wird das problem beheben mit mehreren
idsession
ist, aber es nicht zurückg.name
oderf.value
:InformationsquelleAutor Gordon Linoff