線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1429
推到 Plurk!
推到 Facebook!

主副表更新的sql寫法

尚未結案
JamesLiang
初階會員


發表:54
回覆:78
積分:31
註冊:2003-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-25 13:45:10 IP:67.124.xxx.xxx 未訂閱
請教先進..我想寫個SQL他的功能是將副表中符合條件的紀錄中的重量欄位加總 後存入主表的欄位內,但是出現錯誤,sql如下 update master set master.totalwt = (select sum(weight) from detail inner join master on master.code = detail.code where detail = 'F') 多謝
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-25 13:57:29 IP:61.220.xxx.xxx 未訂閱
少了欄位名稱及括號 update master set master.totalwt = (select sum(weight) from detail inner join master on (master.code = detail.code)  where detail.xxx = 'F') 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-25 14:28:12 IP:211.21.xxx.xxx 未訂閱
引言: 請教先進..我想寫個SQL他的功能是將副表中符合條件的紀錄中的重量欄位加總 後存入主表的欄位內,但是出現錯誤,sql如下 update master set master.totalwt = (select sum(weight) from detail inner join master on master.code = detail.code where detail = 'F') 多謝
您的SQL語法怪怪的,剛剛看一下SQL Server Book OnLine,這樣下看看:
Update Master
Set Totalwt = (Select Sum(Weight) From Detail D Where M.Code = D.Code and D.xxx(這個欄位名稱您沒有寫出來)='F')
From Master M, Detail D
註:這是MS SQL Server的語法 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-25 14:38:19 IP:211.74.xxx.xxx 未訂閱
update master set A1='a' where field='B' 你應該是少了紅色那一段key的指定吧...TRY TRY SEE
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-25 21:14:55 IP:61.221.xxx.xxx 未訂閱
Update Master
Set Totalwt = (Select Sum(Weight) From Detail D Where M.Code = D.Code and D.xxx(這個欄位名稱您沒有寫出來)='F')
From Master M, Detail D
這段 channel 寫得可以工作, 但原理有一點點問題, 稍微修正一下..
Update Master
Set Totalwt = (Select Sum(Weight) From Detail D Where M.Code = D.Code and D.xxx(這個欄位名稱您沒有寫出來)='F')
From Master M , Detail D
原理是因為 外面的 from 資料集並不含 detail table, 在裡面的資料集中已含有了 detail 的 from 子句, 原理上是一個子查詢, 並非是聯合 master 及 detail 的資料集. 這是複合子查詢的語法, 看起來會比較難理解, 底下我再寫一個比較容易看得懂的 先看理論值的 totalwt 應該如何產生:
select m.code, sum(d.weight) as sum_weight from master m, detail d 
where m.code = d.code and d.xxxx = 'F' group by m.code
這是算出應該的 totalwt 值, 接下來我們將這個查詢當作一個結果資料集和原來的 master 利用 code = code 的對應方式, 再來下 update sql 會比較容易些, 如下:
update master set totalwt = b.sum_weight from master m,
(select m.code, sum(d.weight) as sum_weight from master m, detail d 
where m.code = d.code and d.xxxx = 'F' group by m.code) b
where m.code = b.code
這樣一來就是 master 與 b 資料集利用 m.code=b.code 的方式對應, 將結果 update 回 master, 是不是比較好想... 所以更新資料的 update 語法用這種方式是比較容易寫出 command 的哦~
系統時間:2024-07-03 6:17:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!