这些SQL语句有什么问题?

时间:2013-10-28 05:25:24

标签: php mysql sql sql-server count

问题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 个答案:

答案 0 :(得分: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
);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  1. 您的代码显示MySQL,SQL Server和SQL。 SQL的语法可能因RDBMS而异。

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

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

    湾您需要在每个sql语句

  3. 之后添加半冒号

    即使您正在使用任何其他RDBMS,您也需要参考相应的SQL手册并验证您是否指定了确切的数据类型。

答案 3 :(得分:0)

Access不允许一个接一个地运行一批查询。 因此,首先运行CREATE TABLE,然后运行ALTER,依此类推。