Domanda

DELETE FROM Table1 WHERE ConditionID = ConditionID;?

DELETE FROM Table2 WHERE ConditionID=?ConditionID;

DELETE FROM Table3 WHERE ConditionID=?ConditionID;

ConditionID è una colonna presente in Tabella 1, Table2, Table3, invece di eseguire 3 volte singolarmente, c'è un modo per eseguire tutti i tre in una singola query (in mysql)?

È stato utile?

Soluzione

Se il ConditionID è lo stesso per tutte e tre le tabelle, si dovrebbe essere in grado di utilizzare il Tabella multipla Delete Sintassi :

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

Test case:

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

Risultato:

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)

Altri suggerimenti

Non so che cosa il tuo aspetto dello schema piace, ma se si utilizza InnoDB, o un motore di tabella simile per le tabelle e si dispone di chiavi esterne, è possibile impostare le condizioni che causeranno le voci provenienti da eliminare quando una voce di genitore viene eliminato. Vedere http://dev.mysql.com /doc/refman/5.1/en/innodb-foreign-key-constraints.html per maggiori informazioni su questo.

No. ConditionID è separata in ognuno, proprio perché ha lo stesso nome non significa che sia la stessa colonna. Se si qualificano pienamente i nomi, sarete in grado di vedere meglio:

DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;

DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;

DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;

È possibile eliminare righe da più tabelle da solo utilizzando mysql "delete" query.Consider, hai il profilo di due tavoli e libri.

Tavolo Profilo consiste,

  • id
  • nome

tabella libri consiste,

  • pid
  • libro
  • prezzo

È possibile eliminare i record di questi due tavolo per particolare id utilizzando questa query,

delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top