2009-12-10 15 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] 
     ) 

これは文法的に正しくありません。

テーブルからデータを読み取らずに[EnquiryID]がないため、IF EXISTS ...ステートメントでコードを作成できません。

私はどのように私の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 
join [LenqReloaded].[dbo].[Attachment] B on A.[EnquiryID] = B.[EnquiryID] 
WHERE A.[ResponseLetterSent] IS NULL 
4

From句のテーブルエイリアスを削除しますが、Update句でそのエイリアスを使用してください...

4

これは直感に反するようだが、あなたはESTする必要があります:あなたは、あなたの更新に参加を使用する必要が更新されたテーブル

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] 
    ) 
関連する問題