Bonjour à tous,
Je travaille sur une base de données SQL SERVER 2000 qui a une interface Access de consultation et de remplissage. Il y a pas mal de données et certaines évoluent.
J'ai une table que l'on pourrait décrire comme table liaison qui à 4 champs qui forment la clé primaire. Parmi ces 4 champs, trois sont des clés étrangères.
Voici la structure de ma table :
ID_table1
ID_table2
ID_table3
etat
valeur1
valeur2
valeur3
ID_table1, ID_table2 et ID_table3 sont les clés issues d'autres tables. etat est un etat associé au trois clés étrangères pour former la "clé" complexe de la table.
Les données changeant, je dois faire un changement dans les données de cette table. L'ID_table2 ne sera plus le même et des données de la table ayant les mêmes ID_table1, ID_table3 et état vont être rapprochées et obtenir un nouvel ID_table2 (données qui changent) ainsi que l'inverse, des données ayant un ID_table1, un ID_table3 et un état similaire vont être scindées (duplication conditionnelle) en deux ou trois.
Dans le champ valeur1 est stockée une info importante (les infos stockées sont : "pas d'information", "faible", "moyenne", "forte" ) et celle conditionne la duplication et l'agglomération des données. En effet, si mon association de clés étrangères (donnant la clé primaire) a pour valeur1 "pas d'information" et qu'un autre enregistrement devant migrer vers la même association de clés étrangères mais ayant une info pertinente, je veux garder l'info pertinente.
Je dois donc faire des requêtes alambiquées...
Je voudrais donc faire une requête avec une requête imbriquée sur les 4 champs clé (je travaille sur Access pour préparer mes requêtes sélection, ajout et suppression)
Voici ma requête "primaire" :
SELECT ID_table1, ID_table2, ID_table3, etat, valeur1 (et les autres champs) FROM ma_table;
Ma requête que je souhaite imbriquer :
SELECT ID_table1, ID_table2, ID_table3, etat, valeur1 FROM ma_table WHERE ((ID_table2=250) AND (valeur1<>197));
Et j'amerai pouvoir imbriquer la deuxième requête afin de prendre les infos prioritaires par rapport aux autres (je m'explique...). Je sélectionne dans la table seulement les données pas déjà sélectionnées. Je souhaite utiliser un NOT IN et faire un "truc" (enfin une requête) du genre :
SELECT ID_table1, ID_table2, ID_table3, etat, valeur1 (et les autres champs) FROM ma_table WHERE ((ID_table1, ID_table2, ID_table3, etat) NOT IN (SELECT ID_table1, ID_table2, ID_table3, etat, valeur1 FROM ma_table WHERE ((ID_table2=250) AND (valeur1<>197)))
Il faut que cela se fasse sur l'association des clés et je ne sais pas si cela est possible...
Merci de votre aide.
Message édité par Manu la Science le 03-04-2006 à 14:47:51
---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...