Pregunta

DELETE FROM Tabla1 DONDE ConditionID = ConditionID;?

DELETE FROM Table2 WHERE ConditionID=?ConditionID;

DELETE FROM Table3 WHERE ConditionID=?ConditionID;

ConditionID es una columna presente en la Tabla 1, Tabla 2, Tabla 3, en lugar de correr 3 veces de forma individual, ¿hay una forma de ejecutar todos los tres en una sola consulta (en MySQL)?

¿Fue útil?

Solución

Si el ConditionID es el mismo para todas las tres tablas, debe ser capaz de utilizar el Tabla Eliminar varios sintaxis :

DELETE Table1, Table2, Table3
FROM   Table1
JOIN   Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN   Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE  Table1.ConditionID = ?;

caso de prueba:

CREATE TABLE Table1 (id int, ConditionID int);
CREATE TABLE Table2 (id int, ConditionID int);
CREATE TABLE Table3 (id int, ConditionID int);

INSERT INTO Table1 VALUES (1, 100);
INSERT INTO Table1 VALUES (2, 100);
INSERT INTO Table1 VALUES (3, 200);

INSERT INTO Table2 VALUES (1, 100);
INSERT INTO Table2 VALUES (2, 200);
INSERT INTO Table2 VALUES (3, 300);

INSERT INTO Table3 VALUES (1, 100);
INSERT INTO Table3 VALUES (2, 100);
INSERT INTO Table3 VALUES (3, 100);

Resultados:

DELETE Table1, Table2, Table3
FROM   Table1
JOIN   Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN   Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE  Table1.ConditionID = 100;

SELECT * FROM Table1;
+------+-------------+
| id   | ConditionID |
+------+-------------+
|    3 |         200 |
+------+-------------+
1 row in set (0.00 sec)

SELECT * FROM Table2;
+------+-------------+
| id   | ConditionID |
+------+-------------+
|    2 |         200 |
|    3 |         300 |
+------+-------------+
2 rows in set (0.00 sec)

SELECT * FROM Table3;
Empty set (0.00 sec)

Otros consejos

No sé lo que les gusta su aspecto de esquema, pero si utilizar InnoDB, o un motor tabla similar para las tablas y tiene las claves externas, se puede establecer condiciones que provocarán las entradas derivadas de ser eliminada cuando una entrada principal esta borrado. Ver http://dev.mysql.com /doc/refman/5.1/en/innodb-foreign-key-constraints.html para obtener más información al respecto.

Nop. ConditionID es separada en cada uno sólo porque tiene el mismo nombre no quiere decir que sea la misma columna. Si reúne los requisitos plenamente los nombres, podrás ver mejor:

DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;

DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;

DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;

Puede eliminar filas de varias tablas sólo por el uso de MySQL "Borrar" query.Consider, que haya dos mesas perfil y libros.

Mesa perfil consiste,

  • id
  • Nombre

mesa de libros consiste,

  • pid
  • libro
  • precio

Se puede eliminar registros de estos dos tipos de tabla de ID en particular mediante el uso de esta consulta,

delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top