En évitant Produit Cartésien avec des Jointures internes
Je sais que cela a été demandé avant, mais je vais avoir de la difficulté à en saisir. J'ai rarement utiliser SQL brut.
J'ai trois tables - Session
, GroupName
et GroupSessionFeedback
.
Je me joins Session
à GroupFeedback
sur idUser
et je me joins GroupName
à Session
sur idGroup
colonne.
Voici mon code SQL:
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;
Je veux ramener unique idSessions
mais il est correspondant à plusieurs reprises en raison de la Rejoint et je n'ai pas une idée de ce que d'autres de l'approche à prendre. J'ai pu faire des appels distincts à la base de données - mais je vais vraiment essayer d'éviter le martelage de la base de données comme il est assez lente comme réponse il est.
Des idées?
Merci d'avance
ands
et ors
. And
a la préséance sur or
, résultant en start
filtre être honoré pour iduser 22 seulement. Les autres utilisateurs sont simplement ajoutés à la suite. Voir Mysql ou/et de préséance?. Utilisation in
ou de joindre tous les ors
entre parenthèses. Deuxième point: si les performances ne s'améliorent pas, alors vous avez probablement besoin de revoir les index.
OriginalL'auteur Linda Keating | 2013-08-31
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé l'exemple sur cette page : Requête SQL retour produit cartésien figure. En toute équité, je n'ai pas de fourniture de la structure de la base dans ma question. Mais le problème est que, dans chacun des tableaux que j'ai rejoint il y a plus d'une colonne qui correspond donc j'ai besoin de réfléchir que dans mon Rejoindre relevés. Voici un exemple de
J'espère que cela aide quelqu'un d'autre.
L
OriginalL'auteur Linda Keating
Essayez d'utiliser ceci:
J'espère que cela elle n'en résout. Toutefois, si tous les autres filtres sont nécessaires dans cette requête, dites-moi.
OriginalL'auteur Rijul
N'cette version de la requête souffrent du même problème:
Si elle est encore en production en double des résultats, alors que voulez-vous les lignes? Après tout, cela permettra de résoudre le problème avec plusieurs
idsession
, mais il n'a pas de retourg.name
ouf.value
:OriginalL'auteur Gordon Linoff