Hãy thử phiên bản này để thay thế:
DELETE FROM startpoint
WHERE id IN (select *
from ((SELECT id FROM stairs WHERE building = 123)
UNION
(SELECT id FROM lift WHERE building = 123)
UNION
(SELECT id FROM qrcodeid WHERE building = 123)
)
Tôi nghĩ rằng vấn đề là một vấn đề phức tạp với định nghĩa của một truy vấn con. Truy vấn con là select
câu lệnh, trong khi một union
là sự kết hợp của select
tuyên bố.
CHỈNH SỬA:
Trên thực tế, nếu bạn muốn hiệu quả, bạn sẽ không sử dụng cách tiếp cận này. Tôi chỉ đang cố gắng chỉ cách sửa lỗi. Một giải pháp tốt hơn sẽ là:
DELETE sp FROM startpoint sp
WHERE EXISTS (select 1 from stairs s where s.building = 123 and s.id = sp.id) or
EXISTS (select 1 from lift l where l.building = 123 and l.id = sp.id) or
EXISTS (select 1 from qrcodeid q where q.building = 123 and q.id = sp.id);
Các chỉ mục được đề xuất trên stairs(id, building)
, lift(id, building)
và qrcodeid(id, building)
.