Solved

In SQL, for each value returned how do I delete rows in another table identified by each returned values?

Posted on 2009-05-13
4
175 Views
Last Modified: 2012-05-06
In SQL, for each value returned how do I delete rows in another table identified by each returned values

Consider, I have table A:

key | name_key
1       matt d.
2       keith r.
3       bob h.

In table B I have

name_key | cars
1       koenigsegg
1       veyron
1       enzo
2       astra
3       veyron

Basically, I want the command to delete the owners of veyrons from table A (1 and 3) as well as the veyron entry in table B.
However there should be enough logic to know not to remove entry 1 from table A because he owns other cars.

I'm thinking something along
0
Comment
Question by:Matt_Du
4 Comments
 
LVL 4

Accepted Solution

by:
j_s_kelley earned 300 total points
ID: 24380669
Your request doesn't make sense.  If you want to delete the owners of Veyrons in Table A, that would include owner 1.  You can't delete him and leave him in.  I'm gonna take a shot that what you mean is delete that Veyron's and if there are any users that no longer have cars in table B, remove them as well.  You can do this in 2 steps.  See the code.  If this is not what you want to do, please clarify.
Delete From B where Cars = 'Veyron'

Delete From A where key not in (Select name_key from B)

Open in new window

0
 
LVL 25

Assisted Solution

by:reb73
reb73 earned 100 total points
ID: 24380699
Try the sample code below (keep a backup of your original tables just in case!) -

 
DELETE T1

FROM TableA T1

WHERE EXISTS (SELECT NULL FROM  TableB WHERE TableB.name_key = T1.name_key AND cars = 'veyron')

AND NOT EXISTS (SELECT NULL FROM TableA T2 WHERE T2.name_key = T1.name_key AND cars <> 'veyron')
 

DELETE TableB

WHERE cars = 'veyron'

Open in new window

0
 
LVL 57

Assisted Solution

by:Raja Jegan R
Raja Jegan R earned 100 total points
ID: 24380706
Hope this helps:
declare @cnt int,

@key int,

@cars varchar(100);

declare cursor del_cur for

select name_key,cars

from tableB

where cars = 'veyron';
 

OPEN del_cur;
 

FETCH NEXT FROM del_cur

INTO @key, @cars;
 

WHILE @@FETCH_STATUS = 0

BEGIN

   set @cnt = (select count(*) from tableB where name_key = @key and cars = @cars);

   IF @cnt = 1

   begin

      delete from tableB where name_key = @key and cars = @cars;

      delete from tableA where key = @key;

   end

   ELSE

   begin

      delete from tableB where name_key = @key and cars = @cars;

   end
 

FETCH NEXT FROM del_cur

INTO @key, @cars;

END 

CLOSE del_cur

DEALLOCATE del_cur

Open in new window

0
 

Author Closing Comment

by:Matt_Du
ID: 31581266
Thanks all!
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

As they say in love and is true in SQL: you can sum some Data some of the time, but you can't always aggregate all Data all the time! Introduction: By the end of this Article it is my intention to bring the meaning and value of the above quote to…
Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now