Bonjour,
La table ARTICLESPOSSEDES décrit la liste des articles que possède chaque personne. Une ligne correspond à un
article (représenté par un numéro pour simplifier) possédé par une personne. Pour connaître tous les articles
que possède une personne donnée, il faut exécuter la requête :
SELECT ARTICLE FROM ARTICLESPOSSEDES WHERE NOM = <Nom personne>;
1 2 3 4 5 6
|
SQL> DESC ARTICLESPOSSEDES
Name Type Nullable Default Comments
--------- ------------ -------- ------- ------------------------------------
NOM VARCHAR2(10) Nom
ARTICLE NUMBER(3) Article possédé |
La table PERSONNE stocke une liste de personnes.
1 2 3 4 5 6 7 8 9 10
|
SQL> DESC PERSONNE
Name Type Nullable Default Comments
------- ------------ -------- ------- ------------------------------
ID NUMBER(4) Identifiant
TYPE NUMBER(3) Type d'emploi occupé
NOM VARCHAR2(10) Nom
PRENOM VARCHAR2(10) Prénom
Tel NUMBER(4) Numéro de téléphone
Age NUMBER(3) Age |
Je veux exécuter une requête qui indique si une personne de type 100 et d'âge 20 ans possède ou non, comme TOTO, l'article 200.
Le cas échéant, la requête doit me renvoyer la ligne concernée, sinon, elle ne doit rien me renvoyer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
SELECT *
FROM Personne P
WHERE P.ID = 100
AND P.AGE = 20
AND (SELECT COUNT(1)
FROM ARTICLESPOSSEDES A
WHERE A.NOM='TOTO'
AND A.ARTICLE=200)
=
(SELECT COUNT(1)
FROM ARTICLESPOSSEDES A
WHERE A.ARTICLE=F.FWEPROF
AND A.ARTICLE=200) |
1er cas
TOTO possède l'article 200 et il existe des personnes de type 100 et d'âge 20 ans qui possèdent le susdit article, alors
ma requête doit me renvoyer la liste de ces personnes.
2nd cas
TOTO possède l'article 200 et personne de type 100 et d'âge 20 ans ne possède le susdit article, alors, ma requête
ne doit rien me renvoyer.
3ième cas
TOTO ne possède pas l'article 200 et il existe des personnes de type 100 et d'âge 20 ans qui possèdent le susdit article, alors, ma requête
ne doit rien me renvoyer du tout non plus.
Ces trois cas-là fonctionne très bien, j'obtiens les réponses appropriées.
En revanche, il en est autrement avec le 4ième cas :
TOTO ne possède pas l'article 200 et personne non plus de type 100 et d'âge 20 ans ne possèdent cet article. Le requête
me renvoie une liste vide, alors qu'elle devrait me renvoyer au moins une ligne.
Je précise quand même qu'il existe évidemment des personnes de type 100 et d'âge 20 ans dans la table PERSONNE.
La requête
1 2 3 4 5
|
SELECT COUNT(1)
FROM ARTICLESPOSSEDES A
WHERE A.NOM='TOTO'
AND A.ARTICLE=200 |
me renvoie 1, si TOTO possède l'article, 0 sinon. :
Partager