Подтвердить что ты не робот

Строка 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?

4b9b3361

Ответ 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]
    )