Мне пришлось написать запрос, чтобы обновить все записи в таблице на основе записей, которые существуют в двух других разных таблицах. Я написал следующие три итерации запроса, я думаю, что третья - самая эффективная, а первая - худшая. Я просто хотел получить второе мнение и выяснить, смогу ли я сделать лучше, чем третья версия ниже:
P.S .: Первый из них - это не действительный запрос SQL, а псевдокод того, как я планировал запросить базу данных.
SELECT AccountID,Label FROM QueueTable
For each record in query above
SELECT FeedbackID FROM FeedbackIndexed WHERE FeedbackIndexed.Label = QueueTable.Label
AND FeedbackIndexed.AccountID = QueueTable.AccountID
UPDATE FeedbackTable SET Flag = 1 WHERE FeedbackID=@FeedbackID
next
---------------------------------------------------------------------------------------------------------------------
UPDATE FeedbackTable
SET Flag = 1
WHERE FeedbackID IN(SELECT DISTINCT FeedbackID
FROM FeedbackIndexed,
QueueTable
WHERE FeedbackIndexed.Label = QueueTable.Label
AND FeedbackIndexed.AccountID = QueueTable.AccountID)
----------------------------------------------------------------------------------------------------------------------
UPDATE FeedbackTable
SET FeedbackTable.Flag = 1
FROM FeedbackTable
INNER JOIN FeedbackIndexed
ON FeedbackIndexed.FeedbackID = FeedbackTable.FeedbackID
INNER JOIN QueueTable WITH (TABLOCK)
ON FeedbackIndexed.Label = QueueTable.Label
AND FeedbackIndexed.AccountID = QueueTable.AccountID
(I used table lock on QueueTable because at the end of this query i want to drop all records from the que and don't want other parts of the app adding more records to this table while the query above runs, is that right way to do this?)