|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() |
Bonjour,
Je sais que mon problème a l'air simple mais je voudrais avoir une confirmation. Je sais que INNER JOIN est plus recommandé que WHERE pour les jointures. Est-ce qu'une requête comme ceci est exacte : Code :
Merci d'avance de votre aide. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
Vu de loin oui. Mais tout dépend de la définition des tables et de ce que tu attend de cette requête. quelles sont le FK ? sont-elles indexées ? .... ?
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() |
En fait, dans la requête de mon projet, j'utilise trois tables : la première table est liée avec la deuxième par un id et la première avec la troisième par un nom.
Maintenant je ne sais pas si elles sont indexées. On peut voir ça où ? Dans le design ? |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
script table as > Create to > ... poste les scripts générés, comme ca on aura aussi la structure complète des tables. Et au passage, une jointure sur un nom (varchar ?) n'est pas une bonne idée... |
|
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() |
Je vais plutôt te montrer mon code C# où j'utilise la requête :
Code :
La requête comme ça fonctionne mais si je rajoute un INNER JOIN et une propriété de la table MyPanel-Payements, ça ne m'affiche plus rien. |
||
|
|
00
|
|
|
#6 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 665 ![]() |
Bonjour,
Si vous avez remplacé le WHERE de votre requête par un INNER JOIN, c'est normal que celle-ci ne vous retourne rien. Une jointure naturelle (INNER JOIN) vous retourne les valeurs des colonnes des deux tables pour lesquelles les valeurs des colonnes participant à la jointure existent dans les deux tables. Or ici, ce que vous cherchez, c'est les lignes de [MyPanel-ContactLog] pour lesquelles la colonne surveyname n'a pas les valeurs de la colonne projectname de la table [MyPanel-Payements]. C'est donc une demi-jointure que vous devez spécifier : elle vous permet de retourner les lignes pour lesquelles les valeurs des colonnes qui participent à la jointure existent dans les deux tables, plus celles qui n'existent pas dans la table à droite (LEFT JOIN) ou à gauche (RIGHT JOIN) de la jointure. Vous pouvez donc réécrive votre requête comme suit : Code :
N'oubliez pas de qualifier les noms des tables qui participent à votre requête par le nom du schéma auquel elles appartiennent. Cela évite à SQL Server de le chercher pour vous @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#7 |
|
Membre régulier
![]() |
Je vais être honnête, ton code est intéressant mais j'ai pas tout compris.
Pour les alias je connaissais mais pas les LEFT JOIN et les RIGHT JOIN et je ne comprends pas "les valeurs de la table de droite ou de gauche". Au final, je dois afficher en plus une donnée de la table MyPanel-Payements dans le SELECT. Est-ce que la jointure doit être changée ? |
|
|
00
|
|
|
#8 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 665 ![]() |
Bonjour,
Citation:
pour les "droite" et "gauche", il s'agit de la position du nom des tables par rapport au mot-clé JOIN. On dit que la table est à gauche de la jointure quand le nom de la table est avant le mot-clé JOIN, et qu'elle est à droite quand son nom est après le mot-clé JOIN @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com