iT邦幫忙

2

[已解決]SQL SERVER- UPDATE語法問題請教

多謝@小魚大大
也多謝各位幫忙


小弟欲將Table1的c欄位,由原先的數值,全部Update為'1'
如下方:希望結果
試了好幾個方式Join都不對......還請指教指導 感激

Table1
a欄位|b欄位| c欄位
1001 | 0001 | 5
1001 | 0002 | 7
1001 | 0003 | 4

Table2
x欄位 | y欄位
0001 | 8
0002 | 8
0003 | 1
0004 | 3

Where的條件有兩項:
(一)Table1的b欄位 = Table2的x欄位(兩邊資料符合才顯示)
And (二)Table2的y欄位 = 8

希望結果
Table1
a欄位 |b欄位 | c欄位
1001 | 0001 | 1
1001 | 0002 | 1
1001 | 0003 | 1

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
小魚
iT邦大師 1 級 ‧ 2018-01-23 18:59:48
最佳解答

全部 UPDATE 為1那不是很簡單嗎?

UPDATE Table1 SET c欄位 = 1;

就解決了

有可能會跳警告,
不理它就好了。

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2018-01-23 19:00:45 檢舉

還有一種不會跳警告的方式

UPDATE Table1 SET c欄位 = 1 WHERE 1 = 1;

看到WHERE就不會跳警告了...

sjzgo iT邦新手 4 級 ‧ 2018-01-23 19:05:37 檢舉

@小魚大大
雖說是要全部Update成1
但是其中要兩個Where條件須要處理呢

小魚 iT邦大師 1 級 ‧ 2018-01-23 19:12:26 檢舉

這要實際跑看看才能確定,
應該是這樣吧...

UPDATE Table1 SET c欄位 = 1 WHERE b欄位 IN (SELECT x欄位 FROM Table2 WHERE y欄位 = 8)

可是你這樣前後矛盾,
如果y欄位要=8,
你 希望結果 的 0003 那行就不該變成1了...

sjzgo iT邦新手 4 級 ‧ 2018-01-23 19:36:40 檢舉

不好意思,問題打錯了,已修正Table2的x欄位,第四行003改為004

小魚 iT邦大師 1 級 ‧ 2018-01-23 20:12:10 檢舉

這樣得出來的結果還是怪怪的啊...
/images/emoticon/emoticon20.gif

sjzgo iT邦新手 4 級 ‧ 2018-01-24 19:13:18 檢舉

謝謝@小魚大大的鼎力相助,OK了
UPDATE Table1 SET c欄位 = 1 WHERE b欄位 IN (SELECT x欄位 FROM Table2 WHERE y欄位 = 8)

小魚 iT邦大師 1 級 ‧ 2018-01-24 23:04:07 檢舉

不客氣,
那最佳解答麻煩你一下了
/images/emoticon/emoticon39.gif

sjzgo iT邦新手 4 級 ‧ 2018-01-25 15:57:16 檢舉

這當然,哈哈..

milanna iT邦新手 5 級 ‧ 2018-01-26 17:28:48 檢舉

/images/emoticon/emoticon07.gif

0
神Q超人
iT邦研究生 5 級 ‧ 2018-01-23 19:20:07

小魚最後留言和我的想法是一樣的
我就不獻醜 哈哈哈

1
froce
iT邦大師 1 級 ‧ 2018-01-23 21:12:14

搞錯要update的值。
最近常看錯。Orz

另外你的結果蠻怪的

Where的條件有兩項:
(一)Table1的b欄位 = Table2的x欄位(兩邊資料符合才顯示)
And (二)Table2的y欄位 = 8

然後確定出來不是
Table1
a欄位 |b欄位 | c欄位
1001 | 0001 | 1
1001 | 0002 | 1
1001 | 0003 | 4
嗎?

小魚 iT邦大師 1 級 ‧ 2018-01-24 12:04:51 檢舉

我也是這樣想啊...
/images/emoticon/emoticon37.gif

0
棉花
iT邦新手 4 級 ‧ 2018-01-24 08:49:32

Where的條件有兩項:
(一)Table1的b欄位 = Table2的x欄位(兩邊資料符合才顯示)
And (二)Table2的y欄位 = 8

照你的條件先把資料select出來

select *
  from Table1
  join Table2 on Table1.b=Table2.x
 where Table2.y=8

結果應該會長這樣:

a欄位 b欄位 c欄位 x欄位 y欄位
1001 0001 5 0001 8
1001 0002 7 0002 8

不管怎樣都不會出現你希望的結果

因為Table2的0003那一列不會符合"(二)Table2的y欄位 = 8" 這個條件

除非你把Table2中0003那一列的y欄位改為8

1
Corey Chen
iT邦新手 4 級 ‧ 2018-01-24 11:40:27

試試這個方式.....

update Table1 set c=1 from Table1,Table2 where Table1.b=Table2.x and Table2.y=8
0
paulyang0216
iT邦新手 5 級 ‧ 2018-01-24 16:45:38

試試看這個:

UPDATE aa SET c=1
FROM Table1 AS aa
INNER JOIN Table2 AS bb ON bb.x = aa.b AND bb.y = 8

我要發表回答

立即登入回答