J'ai une table qui pourrait avoir des milliers (des millions peut-être?) D'enregistrements. Il s'agit essentiellement d'une table de trace d'audit qui stocke des entrées de journal spéciales. Cela s'appelle "Logs".SÉLECTION d'une fiche et de tous ses enregistrements de détails étrangers associés, dans une seule requête?
Il existe également une table connexe appelée "LogsExtended" qui stocke zéro ou plusieurs enregistrements supplémentaires pour chaque entrée de la table Logs.
Il y a une configuration de relation de clé étrangère, avec suppression cascade etc.
Je fais un SELECT sur la table de journaux pour sélectionner tous les enregistrements qui se sont produits dans un intervalle de temps spécifique, dites « les 30 derniers jours » .
Cependant, je veux en même temps sélectionner en même temps les enregistrements étrangers liés dans la table LogsExtended. Avec l'intention que les résultats de cette requête seront remplis dans un DataSet qui a l'installation DataRelation appropriée.
J'ai essayé d'utiliser diverses clauses JOIN, mais celles-ci ont toutes tendance à entraîner un comportement incorrect - où les entrées des journaux sont répétées pour chaque enregistrement associé dans la table LogsExtended.
Je veux vraiment éviter la solution de secours évidente qui est d'interroger la table des Logs d'abord, puis, pour chaque résultat, exécuter une requête supplémentaire pour obtenir les enregistrements LogsExtended également. Cela me semble très inutile et pourrait entraîner des milliers de requêtes.
Je pense que je fais un peu d'une montagne d'une taupinière, mais je ne peux pas comprendre.
Merci.
Cette deuxième solution est très très proche de ce que je veux: ~) Merci pour cela. Ma seule question est ... la base de données MSSQL se rendra-t-elle compte que la clause WHERE a été répétée deux fois? Va-t-il optimiser cela pour qu'il ne le fasse qu'une seule fois? – nbevans
L'utilisation de params comme je l'ai montré devrait aider à optimiser la requête, et placer un index sur la colonne devrait également aider. –
Merci. J'ai décidé d'accepter votre réponse, car elle m'a remis sur la bonne voie. – nbevans