Строка UPDATE при сопоставлении строки существует в другой таблице
Мне нужно обновить поле в таблице, чтобы оно было истинным, только если соответствующая строка существует в другой таблице, для всех строк, где столбец в настоящий момент пуст в основной таблице.
Это описание того, чего я хочу достичь:
UPDATE [LenqReloaded].[dbo].[Enquiry] A
SET [ResponseLetterSent] = 1
WHERE [ResponseLetterSent] IS NULL
AND EXISTS
(
SELECT * FROM [LenqReloaded].[dbo].[Attachment] B
WHERE A.[EnquiryID] = B.[EnquiryID]
)
Это не является синтаксически правильным.
Я не могу закодировать его с помощью инструкции IF EXISTS... потому что у меня нет [RequestID], не читая данные из таблицы.
Как мне форматировать инструкцию UPDATE?
Ответы
Ответ 1
Ты не за горами...
UPDATE A
SET A.[ResponseLetterSent] = 1
FROM [LenqReloaded].[dbo].[Enquiry] A
WHERE A.[ResponseLetterSent] IS NULL
AND EXISTS ( SELECT * FROM [LenqReloaded].[dbo].[Attachment] B WHERE A.[EnquiryID] = B.[EnquiryID] )
Ответ 2
Вам необходимо использовать соединение в своем обновлении:
UPDATE [LenqReloaded].[dbo].[Enquiry] SET [ResponseLetterSent] = 1
FROM [LenqReloaded].[dbo].[Enquiry] A
join [LenqReloaded].[dbo].[Attachment] B on A.[EnquiryID] = B.[EnquiryID]
WHERE A.[ResponseLetterSent] IS NULL
Ответ 3
Это кажется противоречивым, но вам нужно создать псевдоним таблицы в предложении From, но использовать этот псевдоним в объявлении обновления...
Update E Set
ResponseLetterSent = 1
From LenqReloaded.dbo.Enquiry E
Where ResponseLetterSent Is Null
And Exists (Select * From LenqReloaded.dbo.Attachment
Where EnquiryID = E.EnquiryID)
Ответ 4
То, что вам не хватает, - это предложение "from", которое является расширением t-sql - это единственный способ назначить псевдоним обновленной таблице
update [lenqreloaded].[dbo].[enquiry]
set [responselettersent] = 1
from [lenqreloaded].[dbo].[enquiry] a
where [responselettersent] is null
and exists (
select *
from [lenqreloaded].[dbo].[attachment] b
where a.[enquiryid] = b.[enquiryid]
)