2012-05-06 9 views
7

Tengo una tabla para una encuesta y quiero eliminar todos los registros que están relacionados con una determinada encuesta.Eliminar todos los registros relacionados de varias tablas

Mis tablas:

_______________  _______________  ___________ ________________ 
|_tblSurvey___|  |_tblAnswers___| |_tblAlt__| |_tblQuestions_| 
| surveyID |  | answerAltID | | altID | | questID  | 
| surveyName |  | userID  | | altText | | questText | 
|_____________|  |______________| |_questID_| |_surveyID_____| 

Digamos que quiero borrar todos los registros que están relacionados con SurveyID 1.

Traté:

DELETE 
* 
FROM tblSurvey, tblQuestions, tblAlt, tblAnswers 
WHERE tblSurvey.surveyID = 1 
AND tblsurvey.surveyID = tblQuestions.surveyID 
AND tblQuestions.questID = tblAlt.questID 
AND tblAlt.altID = tblAnswers.answerAltID 
+0

Es el tabla llamada 'tblQuestion' o '' tblQuestions? –

+0

'tblQuestions'. Editado ahora. – janlindso

Respuesta

7

dos maneras:

  • Configura restricciones de clave externa con ON DELETE CASCADE.
  • Utilice una declaración de varias tablas DELETE.

Prueba esto:

DELETE tblSurvey, tblQuestion, tblAlt, tblAnswers 
FROM tblSurvey 
JOIN tblQuestion ON tblsurvey.surveyID = tblQuestion.surveyID 
JOIN tblAlt ON tblQuestions.questID = tblAlt.questID 
JOIN tblAnswers ON tblAlt.altID = tblAnswers.answerAltID 
WHERE tblSurvey.surveyID = 1   
+2

Esta consulta no funciona, creo que debería decir: BORRAR * DE ... ¿no es así? ¿o estoy equivocado? – FidoBoy

2

Si las tablas tienen referencias de clave externa se puede utilizar ON DELETE CASCADE

Cuestiones relacionadas