2010-03-12 4 views
1

Je travaille avec trois tables, et par souci de simplicité, appelons les tables A, B et C. Les deux tables A et B ont une colonne appelée id, ainsi qu'une autre colonne, Aattribute et Battribute, respectivement. La colonne c contient également une colonne id et deux autres colonnes qui contiennent des valeurs pour A.id et B.id. Maintenant, dans mon code, j'ai un accès facile aux valeurs pour Aattribute et Battribute, et que vous souhaitez supprimer la ligne à C, si bien que je veux faire quelque chose comme ceci:Requêtes SQL complexes (DELETE)?

DELETE FROM C WHERE aid=(SELECT id FROM A WHERE Aattribute='myvalue') AND bid=(SELECT id FROM B WHERE Battribute='myothervalue') 

Mais cela ne signifie évidemment pas travail. Est-il possible de créer une seule requête complexe, ou dois-je exécuter trois requêtes, où je reçois d'abord la valeur de A.id en utilisant un SELECT avec 'myvalue', puis la même chose pour B.id, puis les utiliser dans la dernière requête?
[Modifier: il ne me laisse pas commenter, donc en réponse au premier commentaire sur ceci: J'ai essayé la question ci-dessus et cela n'a pas fonctionné, j'ai pensé que c'était juste syntaxiquement correct. Utiliser MS Access, pour ce que ça vaut. ]

+1

Pourquoi cette requête ne fonctionnerait-elle pas? – Grumpy

+0

J'ai essayé la requête ci-dessus et cela n'a pas fonctionné, j'ai pensé que ce n'était pas syntaxiquement correct. Utiliser MS Access, pour ce que ça vaut. – Joe

Répondre

0

Vous devez utiliser IN au lieu de =. Pourquoi cette requête ne fonctionne-t-elle pas?

DELETE 
FROM C 
WHERE aid IN 
     (SELECT id 
     FROM A 
     WHERE Aattribute='myvalue' 
     ) 
AND bid IN 
     (SELECT id 
     FROM B 
     WHERE Battribute='myothervalue' 
     ) 
+0

Juste essayé, n'a pas fonctionné. L'erreur spécifique que j'obtiens est: "Aucune valeur donnée pour un ou plusieurs paramètres requis." Comme indiqué ci-dessus, j'utilise MS Access, je ne sais pas si cela l'affecte. Je googling autour maintenant pour savoir comment utiliser l'IN avec DELETE dans l'accès sql. Merci pour l'aide. – Joe

+0

Cela signifie qu'il ne peut pas travailler sur l'un ou l'autre des noms de champs. C'est peut-être un problème de syntaxe - ça faisait un moment que je jouais avec access - mais fondamentalement ça ne fonctionnait pas les noms de champs – Murph

+0

Bon, j'ai eu un mauvais nom de colonne dans ma deuxième instruction SELECT. Je ne reçois plus d'erreur, bien que ma ligne ne soit pas supprimée. Je continuerai à travailler dessus, merci. – Joe

Questions connexes