2013-10-28 117 views
2

問題1:使用SQL CREATE TABLE語句,創建一個表MOVSTARDIR,其中包含電影號碼,星號和導演編號以及4個代理獎項的屬性。主鍵是電影號碼,明星號碼和導演號碼(全部3個),並強制執行參照完整性。導演編號是該電影的導演,而這位明星肯定已出現在該電影中。 使用INSERt INTO加載MOVSTARDIR(從現有表格)。這些SQL語句有什麼問題?

我的回答:

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語句中的單詞「改變」。另外我如何添加參照完整性? *

問題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` 

* 問題的,這是它列出所有記錄,不只是贏得 * 如果需要數據庫,我可以通過電子郵件發送數據庫。

回答

0

對於問題1:

如果你正在使用MySQL,查詢的創建應該如下

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 
); 
+0

我正在使用Acess來做這些問題,而不是mysql – Uzi

+0

據我所知訪問沒有任何數據類型,如短嘗試使用數字代替。鏈接到數據類型http://msdn.microsoft.com/en-us/library/ms714540%28v=vs.85%29。aspx –

+0

當我只是運行這個代碼CREATE TABLE MOVSTARDIR (MVNUM SHORT NOT NULL,STARNUM SHORT NOT NULL,DIRNUM SHORT NOT NULL,BESTF TEXT,BESTM TEXT,SUPM TEXT,SUPF TEXT)創建表時沒有其餘的代碼添加。但是當我把修改代碼,然後它給了我錯誤。我認爲alter code有些問題。 ALTER TABLE MOVSTARDIR ADD PRIMARY KEY(MVNUM,STARNUM,DIRNUM) – Uzi

0

你錯過每一個語句的分號後,引起訪問將整個文本視爲一個聲明。

0
  1. 您的標籤顯示MySQL,SQL Server和SQL。 SQL的語法可以根據RDBMS而有所不同。

  2. 假設您使用MySQL,這些是您的查詢的問題。

    a。數據類型 - MySQL中沒有SHORT。您可以使用SMALLINT

    b。你需要每個SQL語句

即使你使用任何其他RDBMS,則需要參考相應的SQL手冊,並確認您指定的確切數據類型後添加半冒號。

0

訪問不允許僅運行一批查詢。因此,請先運行CREATE TABLE,然後再運行ALTER等。