2

私は2つのFKUserProfile_IdService_Id. このテーブルには、値を変更する必要があるビット フィールドが含まれています。

2 つの一時テーブルがあります。

最初のテーブル#temp2 :

EmailAddress,
UserProfile_Id

2 番目のテーブル#temp :

EmailAddress,
Service_Id

このステートメントは機能しません。

UPDATE MailSubscription SET BitField=1
where UserProfile_id IN ( SELECT UserProfile_Id from #temp2 ) 
      and Service_id IN ( SELECT ServiceId from #temp)

うまくいかない理由はわかっていますが、うまくいくように修正する方法がわかりません。

結合された #temp と #temp2 でタプル(UserProfile_Id,Service_Id) がどこにあるかを変更する必要があるbitFieldのですが、mssql ではこのように記述できません。MailSubscription

4

6 に答える 6

2

フィルタリング結合を使用できます。

update  m
set     BitField = 1
from    MailSubscription m
join    #temp t1
on      t1.Service_id = m.Service_id
join    #temp2 t2
on      t2.UserProfile_Id= m.UserProfile_Id
        and t1.EmailAddress = t2.EmailAddress
于 2013-07-29T10:57:22.447 に答える
2
UPDATE MailSubscription SET BitField=1
FROM #temp2
JOIN #temp on #temp2.EmailAddress=#temp.EmailAddress
WHERE MailSubscription.Service_id = #temp.ServiceId 
  AND MailSubscription.UserProfile_id =  #temp2.UserProfile_Id 
于 2013-07-29T10:56:33.443 に答える
0

EXISTS 演算子の別のオプション

UPDATE MailSubscription
SET BitField = 1
WHERE EXISTS (
              SELECT 1 
              FROM #temp2 t2 JOIN #temp t ON t2.EmailAddress = t.EmailAddress
              WHERE t2.UserProfile_Id = MailSubscription.UserProfile_Id
                AND t.Service_Id = MailSubscription.Service_Id
              )
于 2013-07-29T11:12:29.813 に答える