2014-06-09 3 views
0

Je n'arrive pas à comprendre pourquoi cette requête ne fonctionnera pas. J'ai fait un SELECT pour vérifier qu'il tire les lignes que je veux. Je mets en DELETE et maintenant ça ne marchera pas.Pourquoi cette requête DELETE ne fonctionnera-t-elle pas?

Voici ma requête SELECT:

SELECT dh.dragon_list_id, dh.habitat_list_id 
FROM dragon_to_habitat dh, dragon_list dl 
    WHERE dh.dragon_list_id = dl.dragon_list_id 
    AND dl.user_id = 1 
    AND dl.is_deleted = false 

Je suis sûr que c'est quelque chose de stupide je surplombe. Peu d'aide est appréciée.

DELETE FROM dragon_to_habitat dh 
    WHERE dh.dragon_list_id = dragon_list.dragon_list_id 
    AND dragon_list.user_id = 1 
    AND dragon_list.is_deleted = false 

J'ai essayé également cette requête avec une jointure qui ne fonctionne pas:

DELETE 
FROM dragon_to_habitat as dh JOIN 
    dragon_list as dl ON dh.dragon_list_id = dl.dragon_list_id 
WHERE dl.user_id = 1 AND dl.is_deleted = false 

Erreur: # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'as dh JOIN dragon_list comme dl ON dh.dragon_list_id = dl.dragon_list_id WH' à la ligne 2

Je veux seulement effacer les valeurs dans le table dragon_to_habitat. La table dragon_list ne devrait pas être touchée.

Pour faire bonne mesure, voici mon schéma: http://sqlfiddle.com/#!2/7ac6a1

+0

ne fonctionnera pas? peut fournir une requête de sélection aussi? –

+0

Quel est votre message d'erreur? En outre, je vois que vous utilisez dragon_list mais je ne vois aucune jointure – Niemand

+0

Qu'est-ce que 'dragon_list'? Une autre table? –

Répondre

2

Vous devez JOIN la dragon_to_habitat et dragon_list Table -

DELETE FROM dragon_to_habitat AS dh 
JOIN dragon_list AS dragon_list ON dh.dragon_list_id = dragon_list.dragon_list_id 
WHERE dragon_list.user_id = 1 AND dragon_list.is_deleted = false 
+0

N'a pas fonctionné, a tenté un JOIN. J'ai ajouté à la question initiale la requête et l'erreur. – Dizzy49

+1

Utilisez ce - dh SUPPRIMER DE dragon_to_habitat AS dh INNER JOIN dragon_list AS dl dh.dragon_list_id = dl.dragon_list_id OÙ dl.user_id = 1 ET dl.is_deleted = 0 une chose dans laquelle la condition que vous avez dragon_list.is_deleted = false mais le type pour is_deleted est tinyint, vous devez changer cette chose. –

+0

A travaillé, merci! – Dizzy49

0

Essayez d'utiliser JOIN:

DELETE 
FROM dragon_to_habitat as dh JOIN 
    dragon_list as dl ON dh.dragon_list_id = dl.id 
WHERE dl.user_id = 1 AND dl.is_deleted = false 
+0

Cela ne fonctionne pas, essayé un JOIN. J'ai ajouté à la question initiale la requête et l'erreur. – Dizzy49

0
DELETE FROM 
dragon_to_habitat 
USING 
    dragon_to_habitat dh 
INNER JOIN 
    dragon_list dl 
ON 
    dh.dragon_list_id = dl.dragon_list_id 
AND 
    dl.user_id = 1 
AND 
    dl.is_deleted = false 
+0

Veuillez ajouter quelques explications à votre réponse. – Ashigore

Questions connexes