Comment savoir si un sous ensemble est contenu dans ensemble

Comment savoir si un sous ensemble est contenu dans ensemble - SQL/NoSQL - Programmation

Marsh Posté le 02-06-2008 à 09:24:29    

Bonjour,
 
Voilà je bute sur une requête SQL : Admettons que j'ai une table avec 2 foreign key (FK1, FK2) et d'autres colonnes.
Je sais qu'une contrainte d'unicité sur le couple  (FK1, FK2) a lieu.
Je recherche donc toutes les les lignes de la table tel que par exemple le couple (1,3) soit présent dans l'ensemble des couples de la table qui sont par exemple {(3,1),(1,3),(2,1)}. Dans mon exemple, une ligne sera donc retournée.
Je bute sur cette requête.
 
NB : il s'agit d'ensemble ordonné (1,3) et pas (3,1).
 
Merci de votre aide :)


Message édité par Giz le 02-06-2008 à 09:25:25

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 02-06-2008 à 09:24:29   

Reply

Marsh Posté le 02-06-2008 à 12:14:13    

Où est la difficulté ? Par exemple, s'il n'y avait pas d'ordre, est-ce que vous y arriveriez ?
D'ailleurs, je ne comprends pas bien votre notion d'ordre, car dans une base de données relationnelle, il n'y a pas d'ordre.
 
Est-ce que vous voulez :
 
Soit la table Clients : champs : Id, Nom, Prenom
Soit la table Orders : champs : Id, Nom, Prenom, Article
La requete qui retourne le nom et prénom des clients ayant commandé au moins un article est

Select distinct C.Nom, C.Prenom
  from Clients C, Orders O
 where O.Nom = C.Nom
   and O.Prenom = C.Prenom

Reply

Marsh Posté le 02-06-2008 à 13:39:11    

Hum, j'ai du mal m'expliquer, je reprends.
 
Soit la table A1 : PK1 champ1
Soit la table A2 : PK2, champ1
Soit la table B : FKB1 ref PK1, FKB2 ref PK2, champ1 + contrainte d'unicité sur la couple (PKB1,PKB2)
Soit la table C : FKC1 ref PK1, FKC2 ref PK2, champ1+ contrainte d'unicité sur la couple (PKC1,PKC2)
Soilt E un ensemble de paire (FK1, FK2)
 
Question : A partir d'un ensemble de ligne de C, retourner un ensemble de ligne de B tel que pour chaque ligne de B retournée, la paire ordonnée (FKB1, FKB2) soit présente dans au moins une ligne de C.
 
OK ?
 
Exemple :
 
Contenu de la table A1 :
 
1,'toto'
2,'titi'
3,'tyty'
 
Contenu de la table A2 :
 
2,'toto'
1,'titi'
3,'tyty'
 
Contenu de la table B :
3,2,'toto'
3,1,'toto'
1,3,'toto'
 
Contenu de la table C :
2,1,'toto'
3,1,'toto'
2,3,'toto'
 
Si je donne en entrée l'ensemble des lignes de la table C, la requête me retourne la ligne 3,1,'toto'


Message édité par Giz le 02-06-2008 à 14:13:07

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 02-06-2008 à 15:06:57    

mot-clé exists?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 02-06-2008 à 16:15:25    

olivthill a écrit :

Où est la difficulté ? Par exemple, s'il n'y avait pas d'ordre, est-ce que vous y arriveriez ?
D'ailleurs, je ne comprends pas bien votre notion d'ordre, car dans une base de données relationnelle, il n'y a pas d'ordre.
 
Est-ce que vous voulez :
 
Soit la table Clients : champs : Id, Nom, Prenom
Soit la table Orders : champs : Id, Nom, Prenom, Article
La requete qui retourne le nom et prénom des clients ayant commandé au moins un article est

Select distinct C.Nom, C.Prenom
  from Clients C, Orders O
 where O.Nom = C.Nom
   and O.Prenom = C.Prenom



 
Vu ton problème Giz et compte-tenu de ton explication supplémentaire ... je pense que OlivThill  
t'a donné la bonne requête
=>
 une simple jointure entre la table B et C avec PKB1 = PKC1 et PKB2 = PKC2 ...
 
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 10-06-2008 à 22:17:35    

vttman2 a écrit :


 
Vu ton problème Giz et compte-tenu de ton explication supplémentaire ... je pense que OlivThill  
t'a donné la bonne requête
=>
 une simple jointure entre la table B et C avec PKB1 = PKC1 et PKB2 = PKC2 ...
 
 


 
+1  
 
déterminer si un ensemble est inclus dans un autre revient à prouver que tous ses éléments sont dans l'autre ensemble
une bête jointure, donc (et accessoirement vérifier que ca correspond au bon nombre de lignes, si vraiment tu insistes)
 
ou inversement qu'il n'existe aucun élément de ton ensemble qui ne soit pas dans l'autre, vérifiable aussi facilement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed