2011-07-06 26 views

cevap

11

Sen SELECT deyimi ancak herhangi bir şeyle alt sorgusu Faktoring/CTE kullanamazsınız. From the documentation:

herhangi üst düzey SELECT ifadesinde ve alt sorgular çoğu türlerinde bu maddeyi belirtebilirsiniz.

Bunu yapabilirsiniz:

DELETE FROM tbl WHERE tbl.id IN 
(WITH X AS(), Y AS(), Z AS() 
SELECT id FROM TBL 
WHERE TBL.ID IN (SELECT ID FROM Z)); 
1

Eh, en azından sen ad verilmiş tüm sorgular nasılsa açıklamada GELEN görünür olması gerekir. Daha fazla sorun olup olmadığını bilmiyorum, ama bu bir zorunluluktur (ve 00928'in, siz yapmadığınızda gerçekleşen hata olduğuna inanıyorum).

+0

Evet, Oracle kazandı fark SQL Server gibi olacak şekilde kullanılmayan kullanılmayan bir alt soruyu bırakmanıza izin vermeyecektir. –

7

Ben bu işe aldık (ki ben SQL Server çalışmıyor eminim):

DELETE FROM TBL 
WHERE TBL.ID IN (
    WITH X AS(), Y AS(), Z AS() 
    SELECT ID FROM Z 
); 
+0

Cool, bunu hiç denemedim. –