2009-12-10 3 views
12

Мне нужно обновить поле таблицы, чтобы оно было истинным, только если соответствующая строка существует в другой таблице, для всех строк, где столбец в настоящий момент является нулевым в основной таблице.Строка 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 ... потому что у меня нет [ID запроса], не читая данные из таблицы.

Как мне отформатировать инструкцию UPDATE?

ответ

9

Вы невдалеке были ...

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

Что вам не хватает является «от» пункта, который является 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] 
    ) 
4

вы должны использовать присоединиться к обновлению:

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 
4

Это кажется нелогичным, но вы должны Эст abile псевдоним таблицы в предложении 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) 
Смежные вопросы