Outils pour utilisateurs

Outils du site


tips_informatiques:bases_de_donnees:mysql:mysql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tips_informatiques:bases_de_donnees:mysql:mysql [2012/09/12 16:26]
nico
tips_informatiques:bases_de_donnees:mysql:mysql [2013/08/06 11:37] (Version actuelle)
nico
Ligne 181: Ligne 181:
 END; END;
 $$ $$
 +</​code>​
 +
 +
 +====== DELETE avec sous-query ======
 +
 +__Soft__: MySQL Ver 5.0
 +
 +__Problème__:​
 +
 +Un DELETE avec une sous-query qui concerne la table dans laquelle des records doivent être effacés ne fonctionne pas directement.
 +
 +Cette requête ne marche pas:
 +
 +<code sql>
 +DELETE FROM bibliographies
 +WHERE bibliographies.id IN
 +(
 +    SELECT bibliographies.id
 +    FROM bibliographies ​
 +    WHERE document_id IN
 +    (
 +        SELECT documents.id ​
 +        FROM documents
 +        WHERE document_subtype_id = 19
 +    )   
 +
 +</​code>​
 +
 +L'​erreur suivante est obtenue: //#1093 - You can't specify target table '​bibliographies'​ for update in FROM clause//
 +
 +__Solution__:​
 +
 +Il suffit de rajouter un SELECT autour de la sous-query pour que la requête passe:
 +
 +
 +<code sql>
 +DELETE FROM bibliographies
 +WHERE bibliographies.id IN
 +(
 +    SELECT * FROM
 +    (
 +        SELECT bibliographies.id
 +        FROM bibliographies ​
 +        WHERE document_id IN
 +        (
 +            SELECT documents.id ​
 +            FROM documents
 +            WHERE document_subtype_id = 19
 +        )
 +    ) AS tmp
 +
 </​code>​ </​code>​
  
tips_informatiques/bases_de_donnees/mysql/mysql.1347460001.txt.gz · Dernière modification: 2012/09/12 16:26 par nico