Выберите список идентификаторов из одной таблицы и удалите все идентификаторы из второй таблицы в SQL Server - PullRequest
2 голосов
/ 23 марта 2012

Я пытаюсь найти лучший запрос для выполнения следующего.

У меня есть 2 таблицы, которые связаны между собой столбцом идентификатора.

Table1

ID
UserID

Table2

ID
SomeDataColumn

Что мне нужно сделать, это выбрать список идентификаторов из Table1, где мой UserID='5' или какой-то номер. Это должно вернуть несколько строк с соответствующими идентификаторами. Затем мне нужно удалить все строки из Table2, содержащие какой-либо идентификатор, из моего возвращенного списка идентификаторов из Table1.

Единственный способ выяснить, как это сделать, - выбрать все строки из моей первой таблицы, поместить их в курсор, а затем перебрать каждую из них, выполнив запрос на удаление для каждого идентификатора. Но, похоже, должен быть более эффективный способ сделать это с помощью соединения или чего-то еще.

Есть идеи? Спасибо всем!

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

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)
3 голосов
/ 23 марта 2012

Это может привести вас туда:

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

Вы правы, считая, что лучший способ в SQL

0 голосов
/ 23 марта 2012

Использовать объединение,

DELETE FROM [Table2] 
FROM [Table2] as t2 
INNER JOIN [Table1] as t1 ON t2.[ID] = t1.[ID] 
WHERE t1.[UserID] = 5; 
0 голосов
/ 23 марта 2012
 DELETE Table2
 WHERE ID IN (
     SELECT ID FROM Table1
     WHERE UserID=5
 )

Что это делает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...