【发布时间】:2014-09-25 22:26:21
【问题描述】:
我有一张表(称为 Table1),其中存储了一些关于电影的信息:
| id | Title | Producer | Released | Actors |
---------------------------------------------
| 1 | Blah1 | Blah1 | Blah1 | Blah1 |
| 2 | Blah2 | Blah2 | Blah2 | Blah2 |
| 3 | Blah3 | Blah3 | Blah3 | Blah3 |
|... | ... | ... | ... | ... |
那张桌子没有问题,这里一切都很好。
问题出在另一个表 (Table2) 上。我有一个脚本,每天运行一次并检查电影网站上的电影排名。所以我想记录Table1中所有电影每天的排名。所以我想出了一个看起来像这样的表格:
| id | Date | Movie1 | Movie2 | Movie3 | ... |
----------------------------------------------------
| 1 | Aug 1 2014 | 7.1 | 4.3 | 9.6 | ... |
| 2 | Aug 2 2014 | 7.2 | 4.2 | 9.4 | ... |
|... | ... | ... | ... | ... | ... |
脚本每天运行一次,因此每天都会创建一行排名。 Movie1 对应 Table1 中 id=1 的电影信息行,Movie2 类似地对应于 id 的电影信息行=2 来自 Table1,依此类推。
第一个问题:如何将整个 Table1 与 Table2 中的单行连接起来? (表 1 中的行对应表 2 中的 MovieN 列)。
结果将是一个完整的 Table1,其中包含来自 Table2 行的值的附加 Ranking 列。例如,在日期=2014 年 8 月 2 日将 Table1 与 Table2 的行连接:
| id | Title | Producer | Released | Actors | Ranking |
-------------------------------------------------------
| 1 | Blah1 | Blah1 | Blah1 | Blah1 | 7.2 |
| 2 | Blah2 | Blah2 | Blah2 | Blah2 | 4.2 |
| 3 | Blah3 | Blah3 | Blah3 | Blah3 | 9.4 |
|... | ... | ... | ... | ... | ... |
第二个问题:如何从第一个问题做同样的事情,但是将 Table1 与两个 Table2 行(row2-row1)的差异的行连接起来,其中 row1:日期=2014 年 8 月 1 日和第 2 行:日期=2014 年 8 月 2 日。即:
| id | Title | Producer | Released | Actors | Ranking |
-------------------------------------------------------
| 1 | Blah1 | Blah1 | Blah1 | Blah1 | 0.1 | <-- (7.2 - 7.1)
| 2 | Blah2 | Blah2 | Blah2 | Blah2 | -0.1 | <-- (4.2 - 4.3)
| 3 | Blah3 | Blah3 | Blah3 | Blah3 | -0.2 | <-- (9.4 - 9.6)
|... | ... | ... | ... | ... | ... |
第三个问题:每天我都会在 Table1 中添加几部新电影。如果我在 Table1 中添加一个新电影,我将不得不在 Table2 中插入一个相应的新列。一般是通过ALTER SQL 命令来完成的,但是它的效率/好设计如何?
另外,我是 SQL 数据库的新手,所以如果我的数据库设计不好,请推荐一个更好的。请注意,我将使用该数据库查询 Date1 和 Date2 之间所有电影的排名变化,就像在第二个问题中一样,所以每天有一行是有意义的,这样我就可以查询 2行(一个用于Date1,另一个用于Date2)并将它们彼此相减以获得Date1-Date2时间段内每部电影的排名变化。
【问题讨论】:
-
@frank-n-stein 不知道 insert 也插入列。