2012-12-15 81 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

相关问题