0

表1

Mail              Special Quote (Y/N)

g@hotmail.com     Blank 
s@ho.com          Blank
sss@j.com         Blank

表2

Email Address     Dept

g@hotmail.com     Config 
s@ho.com          Finance
sss@j.com         Marketing 

Financeここで、表1をYに更新します。ここで、表2の一致する電子メールアドレスはまたはから来ていMarketingます。

UPDATE TABLE 1 
Set Special Quote to be Y 
where in TABLE 2 the Dept is Finance or Marketing for the matching email address.

おそらく、脳が凍ってコーヒーが必要なだけです。

電子メールアドレスで左参加を考えてから、おそらくYビットとNビットのcaseステートメントを少し入れますか?

4

8 に答える 8

3

ケースステートメントは必要ありません。

update table1 set special_quote = 'Y'
where mail in ( select email_address from table2 where dept in ('Finance','Marketing' ))
于 2012-07-13T14:17:37.633 に答える
1

次のことを試してください。

UPDATE A
SET A.SpecialQuote = 'Y'
FROM Table1 A
INNER JOIN Table2 B
ON A.Mail = B.EmailAddress
WHERE B.Dept IN ('Finance','Marketing')
于 2012-07-13T14:17:56.393 に答える
1

私はMySQLユーザーなので、これは間違っている可能性がありますが、次のようにしてみてください。

UPDATE table1 SET specialquote = 'Y'
WHERE Mail IN (SELECT EmailAddress FROM table2 WHERE Dept IN ('Finance','Marketing'))
于 2012-07-13T14:18:03.503 に答える
1

あなたは非常に近かったので、メールフィールドの2つのテーブルを結合する必要がありますが、部門が財務/マーケティングにあるかどうかを確認してください

UPDATE t1
SET t1.[Special Quote] = 'Y'
FROM Table1 t1
INNER JOIN Table2 t2
    ON t1.mail = t2.mail
WHERE t2.Dept in ('Finance','Marketing')

これにより、含まれているアイテムのみが更新されます。Y/ Nのいずれかを更新する場合は、次のように実行できます(SQL Fiddle with Demoを参照) 。

UPDATE t1
SET t1.sq = CASE WHEN t2.dept IS NOT NULL THEN 'Y' ELSE 'N' END
FROM  table1 t1
LEFT JOIN table2  t2
    ON t1.mail = t2.mail
    AND t2.Dept in ('Finance','Marketing')
于 2012-07-13T14:18:40.280 に答える
0

私はCTEを使用してクエリのさまざまな部分を明確にするのが好きなので、これを行う1つの方法を次に示します。あなたがそれを気に入らなければ他のものがあります。

with getval as (
select mail,dept from test2
where dept in ('Marketing','Finance')
)


update test1
set quote = case when dept is NOT null then 'Y' else 'N' end 
from test1 t1
left outer join getval t2 on t1.mail = t2.mail 

とにかく、私は左結合を使用してすべてのレコードを取得し、次にケースを使用して部門が表示された場所を並べ替えました(レコードがCTEで見つかったことを意味します)。

また...

update table1
set quote = case when dept is NOT null then 'Y' else 'N' end 
from table1 t1
left outer join table2 t2 on t1.email = t2.email and t2.dept in ('Marketing','Finance')

それもうまくいくはずです。

于 2012-07-13T14:31:23.117 に答える
0

あなたは正しい方向に進んでいます。構文は次のとおりです。

update table1
    set SpecialQuote = 'Y'
    where mail in (select emailaddress from table2 where dept in ('Finance', 'Marketing')
于 2012-07-13T14:18:41.470 に答える
0

Table1 Set [Special Quote] ='Y' from Table1 t1 join Table2 t2ont1。[EmailAddress]=t2。[EmailAddress]where t2.dept in('Finance'、'Marketing')

テストされていないサンプルなので、その警告を理解しますが、要点を説明するのに十分近いと信じてください。幸運を!

編集:以下のOPの「Y / N更新」コメントに従って、次のように変更します...同じことを達成できる微妙に異なる方法は他にもいくつかあります。これがお役に立てば幸いです。

Update Table1
   Set [Special Quote]=(case when t2.dept='Finance' 
                             then 'Y'
                             when t2.dept='Marketing'
                             then 'Y'
                             else 'N' 
                        end) 
  from Table1 t1
  join Table2 t2
    on t1.[Email Address]=t2.[Email Address]
于 2012-07-13T14:19:13.390 に答える
0
create table #tbl1 (mail varchar(50),quote varchar(1))
create table #tbl2 (mail varchar(50),dept varchar(10))

insert into #tbl1 values ('a@a.com','')
insert into #tbl1 values ('b@b.com','')
insert into #tbl1 values ('c@c.com','')
insert into #tbl1 values ('d@d.com','')
insert into #tbl1 values ('e@e.com','')

insert into #tbl2 values ('a@a.com','config')
insert into #tbl2 values ('b@b.com','finance')
insert into #tbl2 values ('c@c.com','marketing')
insert into #tbl2 values ('d@d.com','other')
insert into #tbl2 values ('e@e.com','skivers')


update #tbl1
set quote = 'Y'
where mail in (SELECT mail FROM #tbl2 WHERE dept IN ('finance','marketing'))

select * from #tbl1

drop table #tbl1
drop table #tbl2
于 2012-07-13T14:20:14.303 に答える