Xóa dữ liệu từ nhiều bảng trong sql

Tôi vẫn cố gắng xóa xuất phát từ một vài bảng cùng một dịp. Tôi đã triển khai một chút nghiên cứu và phân tích và đã chuyển ra

DELETE FROM `pets` p, `pets_activities` pa WHERE p.`order` > :order AND p.`pet_id` = :pet_id AND page authority.`id` = p.`pet_id`Tuy nhiên, tôi nhận ra lỗi này

Uncaught Database_Exception <1064>: Quý khách hàng tất cả lỗi vào cú pháp Squốc lộ của mình; khám nghiệm giải đáp khớp ứng cùng với phiên bản sever MySQL của chúng ta để hiểu đúng cú pháp để thực hiện ngay sát "p, pets_activitiespa làm đẹp ...

You watching: Xóa dữ liệu từ nhiều bảng trong sql

Tôi không khi nào triển khai xóa bảng chéo cánh trước đó, bởi vì vậy bây chừ tôi thiếu kinh nghiệm và bị mắc kẹt!

Tôi vẫn làm những gì sai?


mysql sql mysql-error-1064 sql-delete
— alex nguồn

Câu trả lời:


204

Sử dụng một JOINvào DELETEtulặng cha.

DELETE p, page authority FROM pets p JOIN pets_activities page authority ON page authority.id = p.pet_id WHERE p.order > :order AND p.pet_id = :pet_idHình như, bạn cũng có thể thực hiện ...

DELETE page authority FROM pets_activities pa JOIN pets p ON page authority.id = p.pet_id WHERE p.order > :order AND p.pet_id = :pet_id... chỉ xóa tự pets_activities

Xem này .

Đối với xóa bảng độc nhất vô nhị, tuy nhiên với toàn diện tmê mẩn chiếu, có những cách không giống làm cho cùng với EXISTS, NOT EXISTS, IN, NOT INvới vv Nhưng một Một trong những trên, nơi chúng ta chỉ định và hướng dẫn nhưng từ đó bảng để xóa với 1 túng thiếu danh trước lúc FROMkhoản hoàn toàn có thể giúp bạn đạt được thoát khỏi một vài chặt chẽ tương đối đgầy tiện lợi rộng. Tôi bao gồm Xu thế tiếp cận cho tới EXISTS99% những trường đúng theo cùng sau đó bao gồm 1% trong đó cú pháp MySquốc lộ này ra mắt trong ngày.


— cán bộ mối cung cấp
7
Tôi đã thử "xóa tất cả trong 1 truy vấn" này bằng cách nối 6 bảng to (đa số người khoảng chừng ~ 15k hàng) cùng truy tìm vấn mất 155 giây để xóa 63 sản phẩm trong 6 bảng: O
— Klemen Tušar
1
cadman Đây là câu vấn đáp đúng; rất có thể tất cả bàn cãi về câu hỏi áp dụng nó, nhưng mà đôi khi nó rất hữu dụng
— Sitháng Christian
1
+1 Tôi đồng ý rằng điều này vào câu vấn đáp đúng, bởi câu hỏi chưa phải là "bạn nên" nhưng là "làm chũm nào". Tuy nhiên, tôi vẫn thích hợp nghe về 1% vị tôi quan trọng nghĩ về đến một tình huống tốt nhất trong số đó điều này sẽ được ưu tiên.
— Eriông xã Robertson
2
Techouse, bạn đang tđam mê gia cùng thanh lọc bên trên các chỉ số? 15k x 15k x 15k x 15k 15k x 15k là 11 triệu đồng. Có SELECTmất một thời gian tương tự?
— Paul Draper
6
quý khách cũng rất có thể thực hiện LEFT THAM GIA, siêu có lợi trường hợp bảng máy nhị không tồn tại mục tương xứng, còn nếu không sẽ không tồn tại gì bị xóa.
— Lexib0y
20

Vì đây có vẻ như là quan hệ phụ thân / con đơn giản giữa petsvà pets_activities, bạn nên tạo ra buộc ràng khóa nước ngoài của chính mình bằng cách xóa tầng.

Theo từ thời điểm cách đó, lúc 1 petsmặt hàng bị xóa, các pets_activitiesmặt hàng liên quan mang lại nó cũng trở thành tự động hóa bị xóa.

See more: Paparazzi Là Cái Gì ? Cái Nhìn Chính Xác Nhất Về Nghề "Săn Ảnh"

Sau kia, tróc nã vấn của khách hàng trlàm việc yêu cầu solo giản:

delete from `pets` where `order` > :order và `pet_id` = :pet_id
— paxdiablo mối cung cấp
3
Eriông chồng, miễn sao các bạn đang thiết lập tính trọn vẹn tsi mê chiếu, Việc xóa tầng hoàn toàn có thể không khiến ra các băn khoăn rộng là tự bản thân xóa. Chúng tôi vẫn hiểu được đó palà một trong những đứa tthấp phù hợp pvày id/pet_idánh xạ.
— paxdiablo
14
Chà, chúng ta bao gồm suy nghĩ của riêng rẽ bản thân nhưng mà có vẻ nlỗi nhiều người đang tiết kiệm chi phí với chính sách giảm giá không ít sức mạnh của DBMS ". Xóa phân tầng cũng là 1 phần của cai quản tài liệu như trình kích hoạt, quá trình được lưu trữ hoặc các buộc ràng với bọn chúng chỉ nguy hại nếu khách hàng đắn đo bạn đang làm gì. Tuy nhiên, tôi sẽ không còn tranh luận thêm về vấn đề này, họ vẫn đề nghị gật đầu không đồng ý.
— paxdiablo
8
Eriông xã, bây chừ bạn đã ktương đối gợi sự quan tâm của tôi. Làm ráng như thế nào nhằm bạn bảo vệ tính toàn diện tài liệu trong cửa hàng dữ liệu mà lại không biến thành ràng buộc?
— paxdiablo
4
Erichồng nói, "Tôi cũng không thực hiện kích hoạt, thủ tục được tàng trữ hoặc những buộc ràng." À, chúng ta cần sử dụng Excel. :-)
— james.garriss
4
Tôi chỉ ao ước theo dõi và quan sát về vấn đề đó. Tôi đang thay đổi vị trí của chính mình vào Việc xóa các tầng trong trường hợp này. Tôi vẫn là một trong những phần của môi trường thiên nhiên Squốc lộ new sử dụng chúng và sử dụng chúng tương đối tốt với chúng rất gồm tổ chức. Trong hệ thống này, nó hoạt động tốt nhất có thể với ưu thế của Cửa Hàng chúng tôi để có các tầng này trên địa điểm. Nó chắc chắn rằng ngăn chặn dữ liệu không cha mẹ cùng không gian nguy. Vấn đề là số đông người làm việc cùng với các đại lý tài liệu rất cần phải hiểu giải pháp thực hiện bọn chúng một cách bình an. Nhưng luôn luôn gồm có rủi ro lúc những công ty cải tiến và phát triển cửa hàng đang triển khai những đổi khác cửa hàng dữ liệu ko được thống kê giám sát.
— Erichồng Robertson
14
Dùng cái này

DELETE FROM `articles`, `comments` USING `articles`,`comments` WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4hoặc là

DELETE `articles`, `comments` FROM `articles`, `comments` WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
— RN Kushwaha mối cung cấp
1
Tìm thấy một tư liệu xem thêm giỏi để sử dụng điều đó và một vài ba tùy lựa chọn khác trên mysqltutorial.org/mysql-delete-statement.aspx
— Mavelo
3
Bây Giờ tôi không tồn tại đại lý tài liệu mysql nhằm đánh giá, nhưng chúng ta đã trải chỉ định và hướng dẫn gần như gì yêu cầu xóa trước mệnh đề from chưa? Ví dụ:

DELETE p, page authority FROM `pets` p, `pets_activities` page authority WHERE p.`order` > :order AND p.`pet_id` = :pet_id AND pa.`id` = p.`pet_id`Tôi cho rằng cú pháp bạn thực hiện được giới hạn trong số phiên phiên bản new rộng của mysql.


— Brandon Horsley mối cung cấp
1
Truy vấn đó được thực hiện thành công, mặc dù, nó ko xóa ngẫu nhiên hàng làm sao (dẫu vậy tôi có niềm tin rằng nó đề xuất có).
— alex
2

Cú pháp có vẻ như đúng với tôi ... hãy thử đổi khác nó nhằm sử dụng INNER JOIN...

Có một chiếc quan sát về vấn đề đó .


— Andre Gallo nguồn
7
Quá tệ, các bạn dường như không bao hàm chiến thuật thực tế, do links là thiết yếu xác!
— mycroes
1

Đối với bất cứ ai đọc vấn đề này vào khoảng thời gian 2017, đấy là biện pháp tôi vẫn làm một cái nào đó tương tự như.

DELETE pets, pets_activities FROM pets inner join pets_activitieson pets_activities.id = pets.id WHERE pets.`order` > :order AND pets.`pet_id` = :pet_idNói chung, để xóa các hàng khỏi những bảng, cú pháp tôi theo được đưa ra sau đây. Giải pháp dựa trên trả định rằng tất cả một trong những mối quan hệ giữa nhị bảng.

See more: Nghiên Cứu Meta Analysis Là Gì, Giới Thiệu Phân Tích Tổng Hợp

DELETE table1, table2 FROM table1 inner join table2 on table2.id = table1.idWHERE
— Kalesh Kaladharan nguồn
1
Tôi đã kiếm tìm thấy nội dung bài viết này chỉ cho bạn giải pháp xóa tài liệu ngoài những bảng bằng cách thực hiện câu lệnh MySQL DELETE THAM GIA với lời giải thích giỏi.

*


— Ravi Makwamãng cầu nguồn
khi thực hiện trang web của công ty chúng tôi, các bạn chứng thực rằng các bạn đã hiểu và phát âm Chính sách cookie cùng Chính sách bảo mật của Cửa Hàng chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.

Chuyên mục: Chia sẻ