从一个表中选择ID列表,并从SQL Server中的第二个表中删除所有ID

时间:2012-03-22 20:56:00

标签: sql-server tsql

我正在尝试找出最佳查询来完成以下操作。

我有两个与ID列相关的表。

表1

ID
UserID

表2

ID
SomeDataColumn

我需要做的是从Table1中选择我的UserID='5'或某个号码的ID列表。这应该返回具有相应ID的多行。然后我需要删除Table2中包含来自Table1的返回ID列表中任何ID的所有行。

我能弄清楚如何做到这一点的唯一方法是从我的第一个表中选择所有行,将它们放在游标中,然后遍历每个对每个ID运行Delete查询的行。但似乎必须有一种更有效的方法来通过连接或其他方式来做到这一点。

有什么想法吗?谢谢大家!

4 个答案:

答案 0 :(得分:3)

这可能会让你到达那里:

delete from Table2 where ID in (select ID from Table1 where UserID = '5')

你认为a better way in SQL

是正确的

答案 1 :(得分:3)

3种方式

DELETE   FROM SomeTable
WHERE id IN(SELECT id FROM AnotherTAble WHERE USerID = 5 and id is not null)

DELETE  s
 FROM SomeTable s
JOIN AnotherTAble  a on s.ID = a.ID
WHERE a.USerID = 5


DELETE  s
 FROM SomeTable s
WHERE EXISTS (SELECT 1 from AnotherTAble  a WHERE a.ID = S.ID
AND a.USerID = 5)

答案 2 :(得分:0)

 DELETE Table2
 WHERE ID IN (
     SELECT ID FROM Table1
     WHERE UserID=5
 )

那是吗?

答案 3 :(得分:0)

使用联接,

DELETE FROM [Table2] 
FROM [Table2] as t2 
INNER JOIN [Table1] as t1 ON t2.[ID] = t1.[ID] 
WHERE t1.[UserID] = 5;