Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2008 Forums
 Transact-SQL (2008)
 why does not work DELETE FROM ...NOT EXISTS?

Author  Topic 

dalibor
Starting Member

21 Posts

Posted - 2012-09-14 : 13:10:09
Hi all,

I have simple task.


CREATE TABLE PuvodniDochazka
(
RC varchar(12) NOT NULL,
Den date,
Smena varchar(18),
Operace varchar(3)
);

INSERT INTO PuvodniDochazka VALUES ('100',CONVERT(date,'1.9.2012',104),'Ranni','01');
INSERT INTO PuvodniDochazka VALUES ('100',CONVERT(date,'1.9.2012',104),'Ranni','02');
INSERT INTO PuvodniDochazka VALUES ('100',CONVERT(date,'1.9.2012',104),'Ranni','05');
INSERT INTO PuvodniDochazka VALUES ('200',CONVERT(date,'2.9.2012',104),'Ranni','01');
INSERT INTO PuvodniDochazka VALUES ('200',CONVERT(date,'2.9.2012',104),'Ranni','05');

CREATE TABLE PlanovanaSmena
(
Den date,
Smena varchar(18),
Kalendar varchar(18)
);

INSERT INTO PlanovanaSmena VALUES (CONVERT(date,'5.9.2012',104),'Ranni','R8');
INSERT INTO PlanovanaSmena VALUES (CONVERT(date,'2.9.2012',104),'Ranni','R8');


SELECT d.RC
,d.Smena
,d.Den
FROM PuvodniDochazka d
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE d.Den = s.Den AND d.Smena = s.Smena
); -- return 3 rows

DELETE FROM PuvodniDochazka
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE Den = s.Den AND Smena = s.Smena
); -- 0 rows affected. Why?

update PuvodniDochazka
SET Smena = 'vymaz'
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE Den = s.Den AND Smena = s.Smena
); -- 0 rows affected. Why?



Why does my SELECT command selects 3 rows
and
the same DELETE or UPDATE command is typed (0 row (s) affected)?

Where is the difference?

Thanks.

Dalibor

robvolk
Most Valuable Yak

15732 Posts

Posted - 2012-09-14 : 13:15:52
The UPDATE and DELETE did not have aliases and were not correlated like the SELECT was:
DELETE D FROM PuvodniDochazka D
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE D.Den = s.Den AND D.Smena = s.Smena
);

UPDATE D
SET Smena = 'vymaz'
FROM PuvodniDochazka D
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE D.Den = s.Den AND D.Smena = s.Smena
);
Go to Top of Page

dalibor
Starting Member

21 Posts

Posted - 2012-09-14 : 16:18:33
[code]
DELETE D FROM PuvodniDochazka
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE Den = s.Den AND Smena = s.Smena
);
[/code]

is not working.
SQL Server 2008 R2 Express responding:
Msg 208, Level 16, State 1, Line 1
Invalid object name 'D'.
Go to Top of Page

dalibor
Starting Member

21 Posts

Posted - 2012-09-14 : 16:20:26
I am sorry, is working:

DELETE D FROM PuvodniDochazka D
WHERE NOT EXISTS
( SELECT s.Den FROM PlanovanaSmena s
WHERE D.Den = s.Den AND D.Smena = s.Smena
);

Thanks!
Go to Top of Page
   

- Advertisement -