2

问题 1:使用 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 PRIMARY KEY (MVNUM,STARNUM,DIRNUM) 

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

*它给了我一个错误,说“create table”语句有问题,它在 SQL 语句中突出显示了“alter”这个词。另外我如何添加参照完整性?*

问题 2:列出 MOVSTARDIR 中的导演,以及从表中包含的 4 个奖项类别中获得的总奖项。列出导演姓名(不是编号),以及 4 个类别中每个类别的人数以及所有 4 个类别的总和。按董事姓名对报告进行分组(即每位董事一行,每位董事出现一次),并按总和(降序)排序。仅显示总和大于 3 的行。

SELECT DISTINCT DIRNAME, COUNT(BESTF) AS BESTFE, COUNT(BESTM) AS BESTML, 
COUNT(SUPM) AS SUPML, COUNT(SUPF) AS SUPFE, 
(COUNT(BESTM) COUNT(BESTF) COUNT(SUPM) COUNT(SUPF)) AS TOTAL 
FROM MOVSTARDIR, DIRECTOR 
WHERE MOVSTARDIR.DIRNUM=DIRECTOR.DIRNUM 
AND ((BESTM IS NOT NULL) OR (BESTF IS NOT NULL) OR (SUPM IS NOT NULL) 
OR (SUPF IS NOT NULL))  
GROUP BY DIRNAME 
HAVING (COUNT(BESTM) COUNT(BESTF) COUNT(SUPM) COUNT(SUPF)) 3 
ORDER BY (COUNT(BESTM) COUNT(BESTF) COUNT(SUPM) COUNT(SUPF))DESC`

*问题在于它列出了所有记录,而不仅仅是获胜* 如果需要数据库,我可以通过电子邮件发送数据库。

4

4 回答 4

0

对于问题 1:

如果您使用的是 mysql,则 create 的查询应如下所示

CREATE TABLE  `MOVSTARDIR` (
`MVNUM` SMALLINT NOT NULL ,
`STARNUM` SMALLINT NOT NULL ,
`DIRNUM` SMALLINT NOT NULL ,
`BESTF` TEXT NOT NULL ,
`BESTM` TEXT NOT NULL ,
`SUPM` TEXT NOT NULL ,
`SUPF` TEXT NOT NULL
);
于 2013-10-28T05:31:42.973 回答
0

Access 不允许运行一批查询,只能一个一个地运行。因此,首先运行 CREATE TABLE,然后运行 ​​ALTER 等等。

于 2013-10-29T05:41:42.873 回答
0

您在每个语句后都缺少分号,导致 Access 将整个文本视为一个语句。

于 2013-10-28T06:49:38.727 回答
0
  1. 您的标签显示 MySQL、SQL Server 和 SQL。SQL 的语法可能因 RDBMS 而异。

  2. 假设您使用的是 MySQL,这些是您的查询的问题。

    一个。数据类型 - MySQL 中没有 SHORT。您可以使用 SMALLINT

    湾。需要在每条sql语句后加分号

即使您使用任何其他 RDBMS,您也需要参考相应的 SQL 手册并确认您指定了准确的数据类型。

于 2013-10-28T07:11:16.720 回答