[MySQL] where clause pour DELETE

arnaudligth -  
 BNJL -
Bonjour,

Alors en fait j'ai 2 tables :
- refs qui a comme champs id_ref et d'autres champs quelconque
- stocks qui a comme champs id_stock, id_ref et d'autres champs quelconque

ce que je voudrais faire c'est effacer de la table refs les enregistrements dont les id_refs ne sont pas présents dans la table stocks, pour illustrer :

table refs
id_ref
1
2
3
4
5

table stocks
id_stock | id_ref
1 | 2
2 | 3
3 | 4
4 | 5

dans cet exemple il faudrait que l'enregistrement avec l'id__ref=1 soit effacer de la table refs car il n'es pas présent dans la table stock.

PS
Si c'est pas possible avec DELETE une requete avec SELECT qui me permet de lister les id_refs qui sont présents dans la table refs et pas dans la table stocks.
Si je peux avoir les explications avec ça serai encore mieux, histoire de pas rester dans l'ignorance...

Merci d'avance.
Configuration: Windows XP
Firefox 3.0.6

2 réponses

  1. Psyk974 Messages postés 559 Statut Membre 51
     
    Bonjour,

    Alors avec un SELECT :

    $query('SELECT id_ref
               FROM refs
               WHERE id_ref NOT IN (SELECT id_ref FROM stocks)');


    Avec un DELETE :

    $query=('DELETE * 
                  FROM refs WHERE id_ref NOT IN (SELECT id_ref FROM sotcks)');
    0
    1. arnaudligth
       
      Merci pour ta réponse Psyk mais je doit louper un truc parce que pour la requete SELECT dans PHPMyAdmin j'ai droit à un

      MySQL a répondu:
      #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id_ref FROM stocks ) LIMIT 0, 30' at line 1
      0
    2. Psyk974 Messages postés 559 Statut Membre 51 > arnaudligth
       
      Quelle est ta version de mysql ?
      0
    3. arnaudligth > Psyk974 Messages postés 559 Statut Membre
       
      euh... comment savoir ? (punaise ça crains pour moi là je crois...) je suis chez 1and1
      0
    4. Psyk974 Messages postés 559 Statut Membre 51 > arnaudligth
       
      Sur la page d'accueil de phpmyadmin normalement on te donne la version.

      Sinon sur l'espace de ton hebergeur on te donne la version de mysql
      0
    5. arnaudligth > Psyk974 Messages postés 559 Statut Membre
       
      laborieux mais j'ai trouvé MySQL4.0 !!!
      0
  2. Psyk974 Messages postés 559 Statut Membre 51
     
    Alors utilise un LEFT JOIN

    SELECT id_refs 
    FROM stocks LEFT JOIN refs
                  ON stocks.id_refs = refs.id_refs
    WHERE refs.id_refs is NULL

    0