2012-12-15 78 views
0

我有2張桌子。
電影
- ID(PK)
- 標題
- 型

情節
- ID(PK)
- 插曲(PK)
- 標題

每部電影都有一些情節。

電影
什麼是更新SQL Server CE表的最佳方式?

--------------------------------- 
| id | title  | type  | 
|----|-------------|------------| 
| 1 | movie1  | 3 episodes | 
| 2 | movie2  | 2 episodes | 
--------------------------------- 


情節

---------------------------------------- 
| id | episode  | title    | 
|----|-------------|-------------------| 
| 1 | 1   | movie1 episode 1 | 
| 1 | 2   | movie1 episode 2 | 
| 1 | 3   | movie1 episode 3 | 
| 2 | 1   | movie2 episode 1 | 
| 2 | 2   | movie2 episode 2 | 
---------------------------------------- 


如果我更新記錄id = 「1」(這兩個表上),我經常使用:
電影

Update Movie set title='...', type='...' where id=1; 

情節

Delete from Episode where id=1; 
Insert into Episode(id, episode, title) values('...', '...', '...'); 

我認爲這是更新表集一個笨方法。我想不出另一種更新記錄的方法,考慮用戶可能會更改,添加或刪除表上的某些記錄,然後將所有更改保存到數據庫。

任何人都有另一種解決方案?

編輯:

前。 用戶做表集的某些變化(只是ID = 1)
情節

---------------------------------------- 
| id | episode  | title    | 
|----|-------------|-------------------| 
| 1 | 1   | movie1 episode 1 | 
| 1 | 2   | movie1 episode 1a | 
| 1 | 3   | movie1 episode 2 | 
| 1 | 4   | movie1 episode 3a | 
| 1 | 5   | movie1 episode 3b | 
---------------------------------------- 

我怎麼能存儲所有變更數據庫?

+0

@Mahmoud Gamal我想將所有的值(用戶添加,編輯或刪除之後)存儲到數據庫中。 – Reyn

回答

0

我覺得這個查詢可以解決你的問題:

update Movie m inner join Episode e on m.id = e.id and m.id = 1 set m.title = 'your_value', e.title = 'your value' 

DB:MYSQL 5.5

+0

它只更新表格上的當前值。但是,如果用戶在表上添加,刪除和編輯記錄,我無法使用該查詢?恩。當前表Episode(id = 1)有3行,然後用戶添加新行,刪除某行,並編輯某一行。如何將所有該值(畢竟由用戶更改)存儲到數據庫? – Reyn

0

我建議改變你的表結構一點,那麼你並不需要全部更新。

即Movie.Type可以通過對Episode(通過電影ID)執行SELECT COUNT(*)來計算。我不明白爲什麼你需要存儲Movie.Type,Episode.Title也可以計算,你只需要在Episode表中存儲Episode Title而不是Movie Title + Episode Title。這樣,您就可以在查詢中計算標題,而不是存儲冗餘數據,然後擔心如何更新它。

+0

對不起,如果我沒有在OP上正確解釋它。但Movie.Title的值與Episode.Title不一樣。而Movie.Type值並不總是顯示電影有多少集。我只是把它像OP一樣簡化了這個例子。 – Reyn

相關問題