2010-11-20 7 views
0

J'ai 2 tables, words et lists.SQL Suppression lors de la vérification des données d'une autre table

words appartiennent à des listes et sont des références par listId domaine.

lists contiennent un champ username.

J'ai besoin de supprimer un mot via id mais il faut d'abord vérifier que le nom d'utilisateur est correct aussi, donc j'ai besoin de référencer la table des listes.

C'est ce que j'ai jusqu'à présent mais cela ne fonctionne pas.

DELETE FROM w 
USING lists AS l INNER JOIN words AS w 
WHERE 
l.username = 'admin' 
AND w.listId = 31 
AND l.id = w.listId 

Répondre

2
DELETE w FROM words w 
INNER JOIN lists l on l.id = w.listid 
WHERE 
l.username = 'admin' 
AND w.listId = 31 
+0

I c pendu 'AND w.listId' à' AND w.id' et cela a fonctionné, désolé, je ne vous ai pas donné assez d'informations – jax

0

Je ne suis pas sûr à 100% ma-syntaxe SQL (j'utilise Oracle), mais cela devrait fonctionner:

DELETE FROM words 
WHERE listid in (
    SELECT 31 from lists where username = 'admin' 
) 

... Si vous aimez vraiment, vous pourriez changer la sélection intérieure pour:

SELECT listId from lists where username = 'admin' and listId = 31 

(mais pas nécessaire)

+0

Cela sélectionne le numéro 31, je ne suis pas sûr qu'il retournerait quelque chose correctement, même sur Oracle. .. –

+1

Droit ... c'est ce qu'il est censé sélectionner! C'est le listId qu'il essayait de supprimer. – Gerrat

Questions connexes