[Résolu] Comment obtenir le résultat -opposé- d'un SELECT ?

Comment obtenir le résultat -opposé- d'un SELECT ? [Résolu] - SQL/NoSQL - Programmation

Marsh Posté le 09-04-2005 à 10:08:27    

Bonjour,
 
J'ai une tablle SALLE et une table EDT (emploi du temps).
 
J'aimerais afficher la liste des salles disponibles à une heure donnée de la semaine. Ce sont donc des lignes qui "n'apparaissent pas" dans EDT. Je ne sais pas trop comment faire pour réaliser cette requête. Il faudrait que je fasse un SELECT par salle (il y en a une centaine) et que si le nombre de résultat est nul, je mémorise cette salle comme étant bonne.
 
Mon autre idée étant de faire l'inverse, récupérer le listing de toutes les salles prises à un moment donné et de conclure que les salles libres sont les salles qui existent moins les salles trouvées (occupées) à ce moment. Je ne sais pas si c'est possible directement en SQL, je ne pense pas. Il faudrait alors que je fasse cette "soustraction" à partir de ma liste complète.


Message édité par Master_Jul le 09-04-2005 à 10:31:07
Reply

Marsh Posté le 09-04-2005 à 10:08:27   

Reply

Marsh Posté le 09-04-2005 à 10:23:09    

La soustraction (sous Oracle) :
 

Code :
  1. SELECT SALLE_ID
  2. FROM SALLE
  3. MINUS
  4. SELECT SALLE_ID
  5. FROM EDT
  6. WHERE DATE = <ma date>;


 
Sinon, si le SGBD le permet, utilise NOT EXISTS :
 

Code :
  1. SELECT s.SALLE_ID
  2. FROM SALLE s
  3. WHERE NOT EXISTS
  4. (SELECT 1
  5. FROM EDT e
  6. WHERE e.SALLE_ID = s.SALLE_ID
  7. AND e.DATE = <ma date> );


 
Et si le SGBD ne le permet pas, tu peux toujours utiliser une jointure externe :
 

Code :
  1. SELECT s.SALLE_ID
  2. FROM SALLE s
  3. LEFT JOIN EDT e ON e.SALLE_ID = s.SALLE_ID
  4. WHERE e.DATE = <ma date>
  5. AND e.SALLE_ID IS NULL;

Reply

Marsh Posté le 09-04-2005 à 10:30:48    

Merci pour ces réponses Beegee !
 
Le SGBD étant 4.1.9-Max, j'ai pu utiliser le NOT EXISTS et les  SELECT imbriqués. :)

Reply

Sujets relatifs:

Leave a Replay

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