【问题标题】:What is the best way to update SQL Server CE table?更新 SQL Server CE 表的最佳方法是什么?
【发布时间】:2012-12-15 08:45:39
【问题描述】:

我有 2 张桌子。
电影
- 身份(PK)
- 标题
- 类型

剧集
- 身份(PK)
- 剧集(PK)
- 标题

每部电影都有一些剧集。

电影

---------------------------------
| 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('...', '...', '...');

我认为更新 Table Episode 是一种愚蠢的方式。我只是想不出另一种更新记录的方法,考虑到用户可能会更改、添加或删除表上的某些记录,然后将所有更改保存到数据库。

有人有其他解决方案吗?

编辑:

例如。 用户对 Table Episode 进行了一些更改(仅 id=1)
Episode

----------------------------------------
| 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 |
----------------------------------------

如何将所有更改存储到数据库中?

【问题讨论】:

  • @Mahmoud Gamal 我想将所有值(在用户添加、编辑或删除之后)存储到数据库中。

标签: sql sql-server-ce crud


【解决方案1】:

我认为这个查询可以解决你的问题:

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'

数据库:MYSQL 5.5

【讨论】:

  • 只更新表中的当前值。但是,如果用户在表上添加、删除和编辑记录,我不能使用该查询?前任。当前表集 (id=1) 有 3 行,然后用户添加新行、删除某些行并编辑某些行。如何将所有这些值(在用户更改后)存储到数据库中?
【解决方案2】:

我建议稍微改变一下你的表结构,这样你就不需要所有的更新了。

即Movie.Type 可以通过对剧集(按电影 ID)执行 SELECT COUNT(*) 来计算。我不明白为什么需要存储 Movie.Type,并且 Episode.Title 也可以计算,您只需将 Episode Title 存储在 Episode 表中,而不是 Movie Title + Episode Title。这样您就可以只计算查询中的标题,而不是存储冗余数据然后担心如何更新它。

【讨论】:

  • 对不起,如果我没有在 OP 上正确解释它。但是 Movie.Title 的值与 Episode.Title 不同。而且 Movie.Type 值并不总是显示电影有多少集。为了简化示例,我只是把它放在 OP 中。
猜你喜欢
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多