DELETE+JOIN

pandipanda
Invité n'ayant pas de compte PHPfrance

19 déc. 2005, 18:03

je cherche a nettoyer une table products des tuple qui non aps de concordance dans une table liée products_description , voici ma requete select qui me renvoie les tuples orphelins masi comment faire pour transformer ce select en delet ???

Code : Tout sélectionner

SELECT * FROM products LEFT JOIN products_description ON products_description.products_id = products.products_id WHERE products_description.products_id IS NULL

Mammouth du PHP | 19672 Messages

19 déc. 2005, 18:35

Quel SGBD et quelle version ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pandipanda
Invité n'ayant pas de compte PHPfrance

19 déc. 2005, 21:20

mysql 4.1 :)

Mammouth du PHP | 19672 Messages

19 déc. 2005, 21:46

Alors tu devrais pouvoir faire une requête imbriquée du style

Code : Tout sélectionner

DELETE FROM table WHERE champ IN (SELECT etc...)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1024 Messages

19 déc. 2005, 22:22

et ça ?

Code : Tout sélectionner

DELETE FROM products LEFT JOIN products_description ON products_description.products_id = products.products_id WHERE products_description.products_id IS NULL
A+

Pascal

pandipanda
Invité n'ayant pas de compte PHPfrance

20 déc. 2005, 10:35

J'ai donc essayé :

requête SQL:

Code : Tout sélectionner

DELETE FROM products WHERE products.products_id IN ( SELECT products.products_id FROM products LEFT JOIN products_description ON products_description.products_id = products.products_id WHERE products_description.products_id IS NULL )
MySQL a répondu:

#1093 - You can't specify target table 'products' for update in FROM clause

idem pour

requête SQL:

Code : Tout sélectionner

DELETE FROM products LEFT JOIN products_description ON products_description.products_id = products.products_id WHERE products_description.products_id IS NULL 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 'LEFT JOIN products_description

HR
Invité n'ayant pas de compte PHPfrance

23 déc. 2005, 02:16

Tu ne peux pas utiliser de LEFT JOIN directement avec DELETE, mais tu dois pouvoir utiliser une table dérivée avec un DELETE multi-table comme ça:

Code : Tout sélectionner

DELETE p.* FROM ( SELECT products.products_id FROM products LEFT JOIN products_description USING (products_id) WHERE products_description.products_id IS NULL ) AS p2, products p WHERE p.products_id = p2.products_id