亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2854 | 回復(fù): 6
打印 上一主題 下一主題

多表間的數(shù)據(jù)更新操作 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2005-12-16 14:52 |只看該作者 |倒序瀏覽
假設(shè)有兩張表a,b
a(ID,Name,Value...)
1,n1,v1...
2,n2,v2...

b(ID,Name,Value...)
11,n1,x...
12,n1,y...
13,n2,z...

要根據(jù)表a.Name=b.Name把表b.Value更新成表a.Value
也就是更新后的期望結(jié)果
b(ID,Name,Value...)
11,n1,v1...
12,n1,v1...
13,n2,v2...

通常大家是怎么做的?根據(jù)一張表的數(shù)據(jù)更新另一張表,大家通常怎么做,一條條數(shù)據(jù)查出來再一條條update?

嘗試了多表的更新語句不知道標準SQL支持不支持的?
我在MYSQL5.0里試了一下
update a,b set b.Vlaue=a.Value where a.Name=b.Name
居然不報錯也沒有任何反應(yīng),query result empty

論壇徽章:
0
2 [報告]
發(fā)表于 2005-12-16 15:03 |只看該作者
不好意思,我剛才數(shù)據(jù)庫有點問題,
update a,b set b.Vlaue=a.Value where a.Name=b.Name
這個語句在mysql5.0下能正常運行。

還是想問問大家一般是怎么做的,還有這種是標準SQL語句嗎,別的數(shù)據(jù)庫一般支持嗎?
有時感覺MYSQL太強了,像多表的delete操作都支持,我以前用oracel都不支持

論壇徽章:
0
3 [報告]
發(fā)表于 2005-12-16 15:03 |只看該作者
是可以的

論壇徽章:
0
4 [報告]
發(fā)表于 2005-12-16 15:43 |只看該作者

如何同步一個表和另一張結(jié)構(gòu)不同的備份表(多了幾個字段的)

現(xiàn)在碰到了一個更麻煩的問題,干脆就繼續(xù)發(fā)在這個貼子里。數(shù)據(jù)結(jié)構(gòu)是虛擬的合理性大家不用考慮。
假設(shè)有一個班級表 class(claseID,studentID,studentName)
claseID,studentID,studentName
1, 01, 張三
1, 02, 李四
2, 03, 王五

另一個備份表classBak(claseID,studentID,studentName,description,year....)
claseID,studentID,studentName,description,year
1, 01, 張三,一年2班,2001
1, 02, 李四,一年2班,2001
2, 03, 王五,一年3班,2001
這classbak備份表里(studentID,studentName)的數(shù)據(jù)和需要和calss同步
我的第一個貼子只解決了update的問題,當class表里有刪除或者增加,classbak里也需要相應(yīng)的增加和刪除(但不是實時的),通過用戶的觸發(fā)一次性同步,應(yīng)該如何處理。

論壇徽章:
0
5 [報告]
發(fā)表于 2005-12-16 16:47 |只看該作者
1.先找出 class 中有而 classBak 中沒有的記錄
SELECT a.classID, a.studentID, a.studentName FROM class AS a LEFT JOIN classBak AS b USING (classID, studentID, studentName) WHERE b.classID IS NULL;
2.把上述記錄添加到 classBak 表
INSERT INTO classBak (classID, studentID, studentName) (SELECT a.classID, a.studentID, a.studentName FROM class AS a LEFT JOIN classBak AS b USING (classID, studentID, studentName) WHERE b.classID IS NULL);

class 表刪除操作就是相當于上面的反向操作,classBak 中有而 class 中沒有,自己寫吧
最后,再用你原來的那句 sql 來同步兩個表。

不過我倒要問你為什么要這么做,就不能在程序中同步做這些事情?而非要事后來維護數(shù)據(jù)的一致性?
比如,對 class 表添加刪除記錄時,同時對 classBak 表也進行操作,加上事務(wù)甚至外鍵,不是簡單很多么?

論壇徽章:
0
6 [報告]
發(fā)表于 2005-12-19 09:12 |只看該作者
謝謝樓上的,因為實際中兩個表各有用處,一張表處于不穩(wěn)定更新狀態(tài),一張表在一個階段穩(wěn)定一些,事實上取數(shù)據(jù)從備份表中取。

論壇徽章:
0
7 [報告]
發(fā)表于 2005-12-24 23:25 |只看該作者
我認為仍在事務(wù)處理里應(yīng)該不錯呀。為何搞的這么麻煩
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP