Page 1 sur 1
DELETE+JOIN
Posté : 19 déc. 2005, 18:03
par pandipanda
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
Posté : 19 déc. 2005, 18:35
par Cyrano
Quel SGBD et quelle version ?
Posté : 19 déc. 2005, 21:20
par pandipanda
mysql 4.1

Posté : 19 déc. 2005, 21:46
par Cyrano
Alors tu devrais pouvoir faire une requête imbriquée du style
Posté : 19 déc. 2005, 22:22
par pascaltje
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
Posté : 20 déc. 2005, 10:35
par pandipanda
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
Posté : 23 déc. 2005, 02:16
par HR
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