Trích dẫn hướng dẫn sử dụng:
Có hai cách để xóa các hàng trong một bảng bằng cách sử dụng thông tin có trong các bảng khác trong cơ sở dữ liệu: sử dụng các lựa chọn phụ hoặc chỉ định các bảng bổ sung trong USING
mệnh đề . Kỹ thuật nào phù hợp hơn phụ thuộc vào hoàn cảnh cụ thể.
Nhấn mạnh đậm của tôi. Sử dụng thông tin không có trong một bảng khác là một chút khó khăn, nhưng có những giải pháp dễ dàng. Từ kho vũ khí tiêu chuẩn đến ...
... việc NOT EXISTS
chống bán tham gia có lẽ đơn giản và hiệu quả nhất đối với DELETE
:
DELETE FROM link_group lg
WHERE NOT EXISTS (
SELECT FROM link_reply lr
WHERE lr.which_group = lg.link_group_id
);
Giả sử (vì định nghĩa bảng không được cung cấp) link_group_id
làm tên cột cho khóa chính của link_group
.
Kỹ thuật @Mihai nhận xét cũng hoạt động (áp dụng chính xác):
DELETE FROM link_group lg
USING link_group lg1
LEFT JOIN link_reply lr ON lr.which_group = lg1.link_group_id
WHERE lg1.link_group_id = lg.link_group_id
AND lr.which_group IS NULL;
Nhưng vì biểu thức bảng trong USING
mệnh đề được nối với bảng đích ( lg
trong ví dụ) với a CROSS JOIN
, bạn cần một thể hiện khác của cùng bảng với bước đệm ( lg1
trong ví dụ) cho LEFT JOIN
, ít thanh lịch hơn và thường chậm hơn.