这就是问题:
使用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
我的问题是创建的表仍然是空白的。如何填写所需的数据?
答案 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的加入。
在不知道表格的情况下,这当然只是一个假设
但是你明白了。