全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1940
推到 Plurk!
推到 Facebook!

SQL Join 的 資料刪除一問

答題得分者是:Stallion
avex_61188
一般會員


發表:1
回覆:2
積分:0
註冊:2006-08-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-25 15:10:36 IP:59.125.xxx.xxx 未訂閱
大家好
我有三個 table, 分別是 People , Link 及 Book. 我利用 join 將這三個 table link 起來成一個人書的關係
這三個 table 敘述如下

[People] P1 P2 P3[Link] P1 B1 P1 B2 P1 B3 P2 B1 P2 B3 P3 B2[Book] B1 B2 B3










我的問題是, 我不想分二次刪,
今天有一本書 B2 要刪除了, 我要怎麼樣可以將 [Book]裡的B2及 [Link] 裡面, 有關聯到B2的資料全部刪除?
注意, People 裡的人不可以被刪掉

Join 可以隨大家想法而改變
在此先謝了 ^ ^


編輯記錄
avex_61188 重新編輯於 2007-12-25 15:12:41, 註解 無‧
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-12-25 17:43:21 IP:210.242.xxx.xxx 訂閱
映像中DELETE只能對一個TABLE吧.如果可以我也要知道方法.謝謝..
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-12-25 22:36:00 IP:61.216.xxx.xxx 未訂閱
印象中ms-sql的view可以做到,不過我沒試過
兩個delete先刪細項資料,再刪主要資料
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-12-26 00:21:56 IP:61.64.xxx.xxx 訂閱
一定會分兩次刪除 (這就不解釋了)
但可以使用一個指令做到,但是每種資料庫的這種特殊指令,不一定一樣
簡單的可以使用 SP 做定義,這樣用一個 SP 指令就可以,原理都差不多
建議用 SP,到哪牌資料庫系統都可以用,不然就用 view (但還要該 view 的能力有支援) 吧!

===================引 用 avex_61188 文 章===================
大家好
我有三個 table, 分別是 People , Link 及 Book. 我利用 join 將這三個 table link 起來成一個人書的關係
這三個 table 敘述如下

[People] P1 P2 P3[Link] P1 B1 P1 B2 P1 B3 P2 B1 P2 B3 P3 B2[Book] B1 B2 B3










我的問題是, 我不想分二次刪,
今天有一本書 B2 要刪除了, 我要怎麼樣可以將 [Book]裡的B2及 [Link] 裡面, 有關聯到B2的資料全部刪除?
注意, People 裡的人不可以被刪掉

Join 可以隨大家想法而改變
在此先謝了 ^ ^

christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-12-26 08:44:29 IP:203.73.xxx.xxx 未訂閱
SP = Stored Procedure (ex: oracle PL/SQL)
===================引 用 syntax 文 章===================
一定會分兩次刪除 (這就不解釋了)
但可以使用一個指令做到,但是每種資料庫的這種特殊指令,不一定一樣
簡單的可以使用 SP 做定義,這樣用一個 SP 指令就可以,原理都差不多
建議用 SP,到哪牌資料庫系統都可以用,不然就用 view (但還要該 view 的能力有支援) 吧!
------
What do we live for if not to make life less difficult for each other?
avex_61188
一般會員


發表:1
回覆:2
積分:0
註冊:2006-08-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-12-26 11:58:35 IP:59.125.xxx.xxx 未訂閱
我試過各種 View , 但不是連 People 都一起刪了就是有刪 book, 不刪 link 的
不知道是不是我用法不對

目前我用 SQL Server 作測試
當然我現在是用二個刪除 SQL , 如 pedro756901 所言, 但真的太麻煩了
而且我怕有一個刪成功,一個刪失敗的現象 (例如 link 刪完, book 還在)
所以我又用了 transaction
但, 我資料庫裡有很多連結都是這樣, 若每一個動作都要如此就覺得很麻煩
StoredProcedure 也是要為每一個連結都作一個 StoredProcedure ? (例如人跟車的關係, 人跟權限的關係.....)

pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-12-26 12:06:48 IP:60.248.xxx.xxx 未訂閱
這是無法避免的,就把兩個delete放在同一個trans,要麻都刪,不然就rollback
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-12-26 14:47:21 IP:75.41.xxx.xxx 未訂閱
不管在MSSQL或者是ACCESS裡在資料庫管理介面上都有一個關聯可以設定,設定關聯後選擇一併刪除相關資料即可,也就是將你的BOOK與LINK資料表設定關聯,一旦成事執行BOOK資料刪除時,在LINK裡面與BOOK相關的資料也會由資料庫直接刪除。
avex_61188
一般會員


發表:1
回覆:2
積分:0
註冊:2006-08-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-12-31 17:11:37 IP:59.125.xxx.xxx 未訂閱
用關聯刪就像我說的也會把 People 刪掉
但我把結案給最接近答案的 ^^
系統時間:2024-05-02 20:48:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!