Question

DELETE FROM Table1 OÙ ConditionID = ConditionID;?

DELETE FROM Table2 WHERE ConditionID=?ConditionID;

DELETE FROM Table3 WHERE ConditionID=?ConditionID;

ConditionID est présent dans la colonne Table1, Table2, Table3, au lieu de courir 3 fois individuellement, il est un moyen pour exécuter toutes les trois dans une même requête (en mysql)?

Était-ce utile?

La solution

Si le ConditionID est le même pour tous les trois tables, vous devriez être en mesure d'utiliser le multiple Delete Table Syntaxe :

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

Cas de test:

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);

Résultat:

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)

Autres conseils

Je ne sais pas ce que votre apparence de schéma aiment, mais si vous utilisez InnoDB, ou un moteur de table similaire pour vos tables et vous avez les clés étrangères, vous pouvez définir des conditions qui causeront entrées dérivées à supprimer quand une entrée parent est supprimé. Voir http://dev.mysql.com /doc/refman/5.1/en/innodb-foreign-key-constraints.html pour plus d'informations sur ce sujet.

Non. ConditionID est séparée dans chacun, juste parce qu'il a le même nom ne signifie pas qu'il est la même colonne. Si vous êtes admissible pleinement les noms, vous serez en mesure de mieux voir:

DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;

DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;

DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;

Vous pouvez supprimer des lignes de plusieurs tables en utilisant simplement mysql « supprimer » query.Consider, vous avez deux tables profil et des livres.

Tableau de profil consiste,

  • id
  • nom

table livres se compose,

  • pid
  • livre
  • prix

Vous pouvez supprimer des enregistrements de ces deux id tableau particulier en utilisant cette requête,

delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top