Condition d'exclusion avec not in(résolu par.... moi)

Condition d'exclusion avec not in(résolu par.... moi) - SQL/NoSQL - Programmation

Marsh Posté le 22-05-2008 à 07:48:09    

Bonjour à tous,
 
 
 
Je suis totalement débutant en SQL. Je cherche à faire une requête qui me retourne une liste en excluant un élément. J’ai les deux tables suivantes:
 
Table1(classe,…)
 
Table2(fournitures,…..)
 
 
 
Si je lance la requête ci-dessous,j’obtiens la liste des classes à l’intérieur desquelles on trouve un tableau:
 

Code :
  1. select classe,fournitures
  2. from  table1 a,table2 b
  3. where a.clé table1=b.clé table2
  4. /*clé table 1=clé table2*/
  5. and fournitures=’tableau’
  6. order by classe


 
 
 
Je voudrais maintenant obtenir la liste des classes sans tableau.
 
J’ai écrit:
 
and fournitures<>’tableau’
 
ou encore :
 
and fournitures not in(select fournitures from table2 where fournitures=’tableau’)
 
Mais dans les deux cas, j’obtiens en fait la liste des classes avec leurs fournitures sauf les tableaux.
 
Par exemple, si la classe 203A dispose entre autres d’un tableau, de bureaux, de chaises…,cette classe ressortira mais dans les fournitures n’apparaîtra pas le tableau. Je précise que je n’ai pas de colonne comptabilisant les fournitures du type :
 
 
 
Classe                   fournitures                        Nombre
 
203A                     tableau                              1
 
203A                     bureaux                              32
 
 
 
Voici mon tableau
 
 
 
classe                   fournitures
 
203A                     tableau
 
203A                     bureau
 
203A                     bureau
 
204                        écran
 
204                        chaise
 
204                        chaise
 
...........
 
205                         placard
 
206                        tableau
 
…..
 
Il y a autant de lignes qu’il y a de fournitures (je sais qu’avec As que je peux avoir le résultat précédent:1,32..). Ici, je voudrais que ressortent uniquement les salles 204 et 205 puisqu'on ne trouve pas de tableau dans celles-ci.
 
Merci d'avance


Message édité par TAM136 le 26-05-2008 à 14:35:27
Reply

Marsh Posté le 22-05-2008 à 07:48:09   

Reply

Marsh Posté le 22-05-2008 à 09:54:01    

Code :
  1. SELECT
  2. DISTINCT classe
  3. FROM
  4.  table1 a
  5.  INNER JOIN table2 b ON a.id=b.id1
  6. WHERE
  7.  NOT EXISTS (
  8.    SELECT
  9.      c.id1
  10.    FROM
  11.      table2 c
  12.    WHERE
  13.      c.id1 = a.id AND c.fournitures = 'tableau'
  14.  )


aux erreurs de syntaxe près

Message cité 1 fois
Message édité par anapajari le 22-05-2008 à 09:54:22

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 22-05-2008 à 12:35:58    

anapajari a écrit :

Code :
  1. SELECT
  2. DISTINCT classe
  3. FROM
  4.  table1 a
  5.  INNER JOIN table2 b ON a.id=b.id1
  6. WHERE
  7.  NOT EXISTS (
  8.    SELECT
  9.      c.id1
  10.    FROM
  11.      table2 c
  12.    WHERE
  13.      c.id1 = a.id AND c.fournitures = 'tableau'
  14.  )


aux erreurs de syntaxe près


 
Bonjour,
 
Merci d'avoir répondu rapidement mais malheureusement, cette requête me retourne uniquement la liste des classes,c'est-à-dire que le code est équivalent à

Code :
  1. select distinct classe
  2. from table 1

Reply

Marsh Posté le 22-05-2008 à 13:11:22    

c'est quoi la structure exacte de tes 2 tables?


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 26-05-2008 à 14:33:57    

anapajari a écrit :

c'est quoi la structure exacte de tes 2 tables?


 
Merci de t'être penché sur mon cas mais à force de réfléchir, j'ai résolu mon problème.
 

Code :
  1. select classe
  2. /*J'avais écrit classe,fournitures ce qui me créait deux colonnes*/
  3. from  table1
  4. /*De fait je n'ai plus besoin de from  table1 a,table2 b*/
  5. where classe not in(select distinct classe from table1 a,table2 b where a.clé table1=b.clé table2 and fournitures='tableau')
  6. order by classe


 
Merci encore


Message édité par TAM136 le 26-05-2008 à 14:34:21
Reply

Marsh Posté le 08-04-2010 à 11:29:57    

Bonjour,
Je suis débutant également et je suis assez coincé par un petit problème.
 

Code :
  1. SELECT count(*), D.Title
  2. FROM T_DVD D, T_LOCATION L
  3. WHERE D.id_dvd=L.id_dvd
  4. GROUP BY D.id_dvd
  5. ORDER BY count(*) DESC


 
J'ai un id_dvd qui arrive en tête qui correspond au titre "DVD EN RETARD" et j'aimerai exclure cette ligne des résultats.
 
Merci de votre aide


Message édité par tony-974 le 08-04-2010 à 11:32:34

---------------
¤ JOE BAR TEAM ¤
Reply

Marsh Posté le 08-04-2010 à 11:42:18    

Merci, désolé pour cette question "bête"
Cela fonctionne :
 

Code :
  1. SELECT count(*), D.Title
  2. FROM T_DVD D, T_LOCATION L
  3. WHERE D.id_dvd=L.id_dvd
  4. AND L.id_dvd <> 000001 /*Numéro identifiant à exclure*/
  5. GROUP BY D.id_dvd
  6. ORDER BY count(*) DESC


---------------
¤ JOE BAR TEAM ¤
Reply

Sujets relatifs:

Leave a Replay

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