【问题标题】:Whats wrong with these SQL statements?这些 SQL 语句有什么问题?
【发布时间】:2013-11-06 19:20:27
【问题描述】:

问题 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`

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

【问题讨论】:

    标签: php mysql sql sql-server count


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      1. 您的标签显示 MySQL、SQL Server 和 SQL。 SQL 的语法可能因 RDBMS 而异。

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

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

        b.需要在每条sql语句后加分号

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          对于问题 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
          );
          

          【讨论】:

          • 我正在使用 Acess 来解决这些问题,而不是 mysql
          • 据我所知,Access 没有任何数据类型,如 Short 尝试使用 Number 代替。链接到数据类型msdn.microsoft.com/en-us/library/ms714540%28v=vs.85%29.aspx
          • 当我刚刚运行此代码 CREATE TABLE MOVSTARDIR (MVNUM SHORT NOT NULL, STARNUM SHORT NOT NULL, DIRNUM SHORT NOT NULL, BESTF TEXT, BESTM TEXT, SUPM TEXT, SUPF TEXT) 它创建的表没有添加的其余代码。但是当我输入 Alter 代码时,它给了我错误。我认为更改代码有问题。 ALTER TABLE MOVSTARDIR 添加主键 (MVNUM,STARNUM,DIRNUM)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-28
          • 2014-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-17
          相关资源
          最近更新 更多