इसके बजाय इस संस्करण को आजमाएं:
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)
)
मुझे लगता है कि यह मुद्दा एक उपश्रेणी की परिभाषा के साथ एक रहस्यमय मुद्दा है। एक सबक्वेरी एक select
है कथन, जबकि एक union
select
. का संयोजन है बयान।
संपादित करें:
वास्तव में, यदि आप दक्षता चाहते हैं, तो आप इस दृष्टिकोण का बिल्कुल भी उपयोग नहीं करेंगे। मैं सिर्फ यह दिखाने की कोशिश कर रहा था कि त्रुटि को कैसे ठीक किया जाए। एक बेहतर समाधान होगा:
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);
stairs(id, building)
. पर अनुक्रमणिका की अनुशंसा की जाती है , lift(id, building)
, और qrcodeid(id, building)
।