Requête complexe sur table ayant 4 champs clé primaire [Résolu] - SQL/NoSQL - Programmation
Marsh Posté le 03-04-2006 à 13:01:22
Si jamais ma question est incompréhensible, faites le moi savoir...
Peut-on faire une requête imbriquée sur plusieurs champs servant de clé primaire ?
Marsh Posté le 03-04-2006 à 14:09:47
La requête que je souhaite faire est une requête minus mais sur une table ayant 4 champs clé primaire. Access n'aime pas "minus" et le NOT IN ne lui plait pas trop d'après ce que je fais.
Marsh Posté le 03-04-2006 à 14:47:28
Après maints essais et des cheveux en moins, j'ai trouvé la solution (ouf).
Si des personnes sont intéressées, je laisserai la solution trouvée (enfin, la solution mieux expliqué que ce qui suit).
Je fais une simple requête sélection sur mes deux requêtes (issues de la même table, mais l'une donnant des infos et l'autre donnant des non-infos). Dans ma requête, je lie les clés de ma requête non-infos vers celles de ma requête infos, j'affiche les champs clés de ma requête non-infos et je sélectionne les champs clés de ma requête infos qui sont nuls.
J'obtiens alors les éléments qui sont seulement dans la table pas d'infos.
Marsh Posté le 03-04-2006 à 08:36:18
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...