سؤال

حذف من Table1 حيث instructionId =؟ intextId ؛

DELETE FROM Table2 WHERE ConditionID=?ConditionID;

DELETE FROM Table3 WHERE ConditionID=?ConditionID;

inctionId هو عمود موجود في Table1 ، Table2 ، Table3 ، بدلاً من تشغيل 3 مرات بشكل فردي ، هل هناك طريقة لتشغيل الثلاثة في استعلام واحد (في MySQL)؟

هل كانت مفيدة؟

المحلول

إذا ConditionID هو نفسه لجميع الجداول الثلاثة ، يجب أن تكون قادرًا على استخدام جملة متعددة حذف بناء جملة:

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

حالة اختبار:

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

نتيجة:

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)

نصائح أخرى

لا أعرف كيف يبدو مخططك ، ولكن إذا كنت تستخدم InnoDB ، أو محرك جدول مشابه لجداولك ولديك مفاتيح أجنبية ، يمكنك تعيين شروط تتسبب في حذف الإدخالات المشتقة عند حذف إدخال الوالد. نرى http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html لمزيد من المعلومات حول ذلك.

لا. ConditionID منفصل في كل واحد - فقط لأنه يحتوي على نفس الاسم لا يعني أنه نفس العمود. إذا كنت مؤهلاً تمامًا للأسماء ، فستتمكن من رؤيتها بشكل أفضل:

DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;

DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;

DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;

يمكنك حذف الصفوف من جداول متعددة عن طريق استخدام Query.Consider MySQL "DELETE" ، لديك ملف تعريف وكتاب.

يتكون جدول الملف الشخصي ،

  • هوية شخصية
  • اسم

يتكون جدول الكتب ،

  • بيد
  • الكتاب
  • سعر

يمكنك حذف السجلات من هذين الجدولين لمعرف معين باستخدام هذا الاستعلام ،

delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top