如何将多个表中的数据插入到一个表中

时间:2013-10-29 03:48:50

标签: sql create-table

这就是问题:

  

使用SQL CREATE TABLE语句,创建一个表MOVSTARDIR,其中包含电影号码,星号和导演号码以及4个表演奖励的属性。主键是电影号码,星号和导演号码(全部为3),强制执行参照完整性。导演号码是那部电影的导演,而这位明星必定出现在那部电影中。   使用INSERT INTO加载MOVSTARDIR(从现有表中)。


这是我目前的解决方案:

CREATE TABLE MOVSTARDIR
(
MVNUM SHORT NOT NULL,
STARNUM SHORT NOT NULL,
DIRNUM SHORT NOT NULL,
BESTF TEXT,
BESTM TEXT,
SUPM TEXT,
SUPF TEXT
);

ALTER TABLE MOVSTARDIR ADD CONSTRAINT PrimeKey PRIMARY KEY(MVNUM, STARNUM, DIRNUM)

INSERT INTO MOVSTARDIR
SELECT MOVIE.MVNUM, STAR.STARNUM, DIRECTOR.DIRNUM, BESTF, BESTM, SUPF, SUPM
FROM MOVIE, STAR, DIRECTOR, MOVSTAR, MOVDIR
WHERE MOVSTAR.MVNUM = MOVIE.MVNUM
AND MOVDIR.MVNUM = MOVSTAR.MVNUM
AND MOVDIR.DIRNUM = DIRECTOR.DIRNUM

我的问题是创建的表仍然是空白的。如何填写所需的数据?

2 个答案:

答案 0 :(得分:0)

我会试试这个:

CREATE TABLE MOVSTARDIR AS
(SELECT MOVIE.MVNUM, STAR.STARNUM, DIRECTOR.DIRNUM, BESTF, BESTM, SUPF, SUPM
FROM MOVIE, STAR, DIRECTOR, MOVSTAR, MOVDIR
WHERE MOVSTAR.MVNUM = MOVIE.MVNUM
AND MOVDIR.MVNUM = MOVSTAR.MVNUM
AND MOVDIR.DIRNUM = DIRECTOR.DIRNUM)

答案 1 :(得分:0)

步骤1:检查select是否返回任何数据

对于测试,您不需要它来返回完整的数据 只需包含一个WHERE子句来测试较小的结果集。

步骤2:确保该选择的预期结果是正确的。

步骤3.1:从select中插入新表

步骤3.2:

如果为您的会话启用了自动提交,则没有错误 那些记录应该在新表中。

如果自动提交已关闭,则您仍需要提交更改 例如this older SO post

备注:

您的查询仍在使用较旧的样式来连接表格 更好地使用当前标准JOIN syntax 它具有更好的可读性 而且更加明显的是缺少哪些连接条件 你不会偶然地想要一个cartesian join

例如:

SELECT 
MOVIE.MVNUM, STAR.STARNUM, DIRECTOR.DIRNUM, BESTF, BESTM, SUPF, SUPM
FROM MOVIE 
JOIN MOVSTAR ON MOVSTAR.MVNUM = MOVIE.MVNUM
LEFT JOIN STAR ON STAR.STARNUM = MOVSTAR.STARNUM
LEFT JOIN MOVDIR ON MOVDIR.MVNUM = MOVSTAR.MVNUM
LEFT JOIN DIRECTOR ON DIRECTOR.DIRNUM = MOVDIR.DIRNUM

请注意,包括STAR的加入。
在不知道表格的情况下,这当然只是一个假设 但是你明白了。