Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
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
Medium Priority
?
188 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
4 Comments
 
LVL 4

Accepted Solution

by:
j_s_kelley earned 1200 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 400 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 400 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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
An alternative to the "For XML" way of pivoting and concatenating result sets into strings, and an easy introduction to "common table expressions" (CTEs). Being someone who is always looking for alternatives to "work your data", I came across this …
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
Suggested Courses

636 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