Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2010, 21h49   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 54
Points : 14
Points : 14
Par défaut Problème de requête avec un "SAUF"

Bonsoir à tous,
voici mon problème :

j'ai une table avec 4 champs :
Nom / secteur_bien / type_bien / prix
Manu - Lille - appart - 120
Seb - Lille - maison - 130
Fred - Lille - maison -300
...
...


j'ai une première requête :
Code :
1
2
3
4
5
6
SELECT * 
FROM prospect 
WHERE secteur_bien = 'Lille' 
  AND type_bien = 'appart' 
  AND prix > '100' 
  AND prix < '200'
cette requête me retourne 1 résultat qui est Manu, que j'affiche

ensuite, j'ai la requête suivante :
Code :
1
2
3
4
5
SELECT * 
FROM prospect 
WHERE secteur_bien = 'Lille' 
  AND prix > '100' 
  AND prix < '150'
Là ça me retourne 2 résultats : Manu et Seb.

Mon souci est que comme j'ai déjà affiché le Manu, je souhaiterais cette fois n'afficher que le Seb.

En gros, je voudrais faire ma requête 2, mais qu'elle me renvoie tous, sauf le résultat de la 1ere requête. J'ai regardé du coté du NOT IN, mais je comprend pas bien comment faire.

Merci d'avance et bonne soirée

Manu
minimoof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 21h59   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 637
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 637
Points : 2 629
Points : 2 629
bonjour,

Vous pouvez utilisez un not in ou un not exists (selon le sgbd le not exists est mieux), pour l'utilisation voir ci-dessous.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT * 
FROM prospect 
WHERE secteur_bien = 'Lille' 
  AND prix > '100' 
  AND prix < '150' 
  AND nom NOT IN (
    SELECT nom  
    FROM prospect 
    WHERE secteur_bien = 'Lille' 
    AND type_bien = 'appart' 
      AND prix > '100' 
      AND prix < '200')
Par contre !! vous avez un problème de modélisation je pense. Qu'allez-vous faire quand vous allez avoir 2 noms identiques qui appartiennent à 2 catégories différentes ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 23h56   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
vous pouvez aussi utiliser EXCEPT :

Requete2
EXCEPT
Requete1
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 09h16   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 968
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 968
Points : 18 200
Points : 18 200
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par punkoff
Par contre !! vous avez un problème de modélisation je penses. Qu'allez-vous faire quand vous allez avoir 2 noms identique qui appartiennent à 2 catégorie différente ?
J'ajoute que ces noms devraient être externalisés dans une autre table et leur identifiant devrait figurer ici.
Idem pour le secteur, à externaliser lui aussi pour éviter des saisies d'un même secteur avec des orthographes différentes (Saint-Étienne, Saint Etienne, St Etienne...).

Enfin, les prix sont des nombres. J'ose espérer que la colonne prix est bien d'un type numérique (INTEGER ou DECIMAL). Inutile donc de mettre ces nombres entre apostrophes.

Citation:
Envoyé par aieeeuuuuu
vous pouvez aussi utiliser EXCEPT :

Requete2
EXCEPT
Requete1
À condition que le SGBD connaisse cet opérateur !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 13h39   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 54
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 54
Points : 14
Points : 14
Merci à tous pour vos contributions.
Ca marche très bien avec le NOT IN.

Pour la modélisation, il faut en effet que je revoie un peu tout ça :S

Merci à vous en tous cas!


Manu
minimoof est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h54.


 
 
 
 
Partenaires

Hébergement Web