Not IN Not Exists sous MySQL?

Not IN Not Exists sous MySQL? - SQL/NoSQL - Programmation

Marsh Posté le 22-03-2005 à 18:23:38    

alut,
J'aimerais effacer l'ensemble des items d'une table fille qui ne sont pas referencés par une table mere comment faire?

Code :
  1. SELECT  *
  2. FROM itemautos
  3. WHERE  NOT
  4. EXISTS (
  5. SELECT reference
  6. FROM item
  7. WHERE item.reference = itemautos.reference )


Code :
  1. SELECT  *
  2. FROM itemautos
  3. WHERE itemautos.id NOT
  4. IN (
  5. SELECT reference
  6. FROM item)


 
 
J'ai essaye ca et ca ne marche pas :(
Merci

Reply

Marsh Posté le 22-03-2005 à 18:23:38   

Reply

Marsh Posté le 23-03-2005 à 08:59:35    

Avant la version 4 de mySql, pas moyen de faire des requêtes imbriquées.
 
Il faut faire des jointures externes plutôt :
 

Code :
  1. SELECT itemautos.* 
  2. FROM itemautos
  3. LEFT JOIN item ON item.reference = itemautos.reference
  4. WHERE item.reference IS NULL;


 
Quand aucune ligne n'est trouvée dans item, les champs renvoyés pour cette table sont NULL, d'où la clause WHERE ;)

Reply

Marsh Posté le 23-03-2005 à 09:42:44    

Merci Beegee je teste ca tout de suite :)

Reply

Marsh Posté le 23-03-2005 à 10:17:22    

Au fait avec un DELETE ca marche comment le LEFT JOIN?

Code :
  1. DELETE  FROM annoncesautos LEFT  JOIN annonces ON annonces.reference = annoncesautos.reference WHERE annonces.reference IS  NULL


Ca ca marche pas :(

Reply

Marsh Posté le 23-03-2005 à 10:52:14    

Essaye pour voir :
 

Code :
  1. DELETE FROM annoncesautos
  2. USING annoncesautos LEFT JOIN annonces ON annonces.reference = annoncesautos.reference
  3. WHERE annonces.reference IS  NULL;


 
Vu ici : http://dev.mysql.com/doc/mysql/en/delete.html

Reply

Marsh Posté le 23-03-2005 à 11:09:36    

Merci encore Beegee ;)

Reply

Marsh Posté le 11-05-2005 à 23:20:25    

Juste une question supplementaire : comment fait-on quand la table sur laquelle on joint a un critere de selection en plus ?
 
Par exemple, sur le sql precedent on voudrait par exemple que annonces.date soit plus petit que XXX ?
 
J'ai un probleme de ce genre, avec une jointure comme ca tous les champs de la table jointe sont nuls, impossible de raffiner la requete ... :??:

Reply

Marsh Posté le 12-05-2005 à 12:33:08    

Code :
  1. Code :
  2.     * DELETE FROM annoncesautos
  3.     * USING annoncesautos LEFT JOIN annonces WHERE annonces.date < XXX ON annonces.reference = annoncesautos.reference
  4.     * WHERE annonces.reference IS  NULL;


 
au pif ...

Reply

Sujets relatifs:

Leave a Replay

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