Здравствуйте. Мне нужно отрефакторить кусок программы с несколькими SQL запросами.
Есть таблица:
| Код | CREATE TABLE [ProjectUserLinked]( [ID] [int] IDENTITY(1,1) NOT NULL, [Project_ID] [int] NULL, [LinkColor_ID] [int] NULL, [ProjectUser_ID] [int] NOT NULL, CONSTRAINT [PK_ProjectUserLinked] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
|
Сначала собирается информация:
| Код | SELECT Project_ID,LinkColor_ID FROM ProjectUserLinked WITH(nolock) GROUP BY Project_ID,LinkColor_ID HAVING count(ProjectUser_ID) = 1
|
Далее в программе работает цикл, который проходит по результатам и выполняет другой запрос на удаление:
| Код | DELETE FROM ProjectUserLinked WHERE Project_ID=$project_id AND LinkColor_ID=$linkcolor_id
|
Я хочу выборку и удаление сделать одним запросом, избавившись от цикла. Возможно ли это без использования курсоров? Не хочу курсор ибо это фактически перенос цикла из программы на сервер, без качественного улучшения. |