J'ai deux tables: TableA et TableB, jointes par TableA.TableA_Id-> 1..n < -TableB.TableA_Id. Un simple PK-FK.Meilleure approche de la requête SQL Server à l'aide de
Je dois extraire distinct Les enregistrements TableA étant donné une certaine condition sur la TableB. Voici ma première approche:
SELECT * FROM TableA A INNER JOIN TableauB B ON A.idA = B.IdA ET B.Date = '2009-01-10' ORDRE PAR A.Id;
C'est sympa, mais ça ne me donne pas d'enregistrements "distincts". Certains enregistrements de la table B peuvent être en double et je pourrais donc obtenir les mêmes enregistrements plus d'une fois.
Je décide donc d'effectuer une sous-sélection (performance n'est pas un problème étant donné que la sous-sélection se terminera probablement avec 20/30 records max):
SELECT * FROM TableA OÙ TableA.Id IN (SELECT DISTINCT IdA FROM TableB WHERE Date = '20090110') COMMANDER PAR TableA.IdA;
Cela fonctionne très bien.
Maintenant la question est: comment puis-je utiliser la jointure interne et toujours obtenir les valeurs distinctes? Est-ce possible en un passage ou la requête imbriquée est un must? Qu'est-ce que je rate?
« Distinct * » est en fait « * », en cas n'y a pas de doublons exacts. –
Exactement, c'est ce que je dis. –
Surtout s'il s'agit de grandes tables, l'approche de la table dérivée où les enregistrements de tableb sont limités avant la jointure peut gagner du temps. C'est une raison de l'essayer. De même, puisque vous ne limitez pas la liste des colonnes à la table, cela ne donnera pas la bonne réponse. – HLGEM