|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Chef de projet Inscription : février 2009 Messages : 137 ![]() |
Bonjour,
Je cherche sur des MS SQL Serveur 2008 et 2008 R2 à extraire des "manques" pour un champ integer. Par exemple, pour la table Matable, avec les champs f1 (int) et f2(int) ou f1 est un primary. f1, f2 1000,247 1001,248 1002,250 1003,251 1004,254 1005,255 1006,257 Je cherche les valeurs manquantes 249,252,253,256 via une requête SQL plutôt que par programme en sachant que j'ai plusieurs millions de lignes dans la table concernée. Je rêve ou c'est possible ? Merci pour votre aide. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
247,248,249.
Est ce une simple valeur ou est une FK? Si c'est une FK vosu avez une table listant toutes les valeurs la requête est donc triviale... Sinon: Avec une table des valeurs... Créez une table des entiers puis faites une WHERE NOT EXISTS... Mais ça va être coûteux! A tester..;
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Chef de projet Inscription : février 2009 Messages : 137 ![]() |
En voilà une idée, je pense qu'elle devrait me permettre de m'en sortir en créant une petite table de 10000 ou plus, de valeurs contigues. A tester pour la dimension, puis faire cette comparaison entre la table "Matable" et la table de référence.
Je ne connaissais pas NOT EXISTS et je ne sais pas ce que veux dire FK. Bref me reste plus qu'a trouver une façon élégante de créer ma table de référence. Je cherche dans ce sens, Merci |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
FK=Foreign Key...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Chef de projet Inscription : février 2009 Messages : 137 ![]() |
Merci pour cette info complémentaire, je n'avais plus les yeux en face des trous...
Pour l'idée de la table de comparaison, j'y suis arrivé, grâce à ton conseil, mais sans arriver à utiliser NOT EXISTS. Juste une table remplie avec les valeurs que je dois trouver dans Matable/f2 et un left join lorsque le champ f1 est à null, donc absent. C'est un peu plus complexe que ça au final, car j'ai des séquences qui se répète chaque jour et j'ai donc un select qui tien compte de date... En tout cas merci |
|
|
00
|
|
|
#6 |
![]() ![]() |
Un EXCEPT sera probablement plus performant qu'une jointure externe.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#7 |
|
Membre du Club
![]() Chef de projet Inscription : février 2009 Messages : 137 ![]() |
Bonjour,
Je vais regarder ce que celà donne, merci Pour que mes essais soient valident, il faut que je le fasse sur une base avec un volume conséquent, la mienne, de test, n'est pas assez volumineuse pour voir une différence de performance. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com