2013-04-26 33 views
0

有人可以幫助我,爲什麼是這個查詢,遇到錯誤時做的「選擇」與「NOT EXISTS」和「除」

select Fname, Lname from EMPLOYEE where not exists ((select Pnumber from PROJECT where Dnum=5) except (select Pno from WORKS_ON where EMPLOYEE.Ssn=Essn)); 

給我的錯誤信息,

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'except (select Pno from WORKS_ON where EMPLOYEE.Ssn=Essn))' at line 1 

它混淆了我coz

select Pnumber from PROJECT where Dnum=5 

不給我任何錯誤信息。我在一本關於製作大學數據庫的書中作爲例子。

mysql> show columns from EMPLOYEE; 
+-----------+---------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-----------+---------------+------+-----+---------+-------+ 
| Fname  | varchar(15) | NO |  | NULL |  | 
| Minit  | char(1)  | YES |  | NULL |  | 
| Lname  | varchar(15) | NO |  | NULL |  | 
| Ssn  | char(9)  | NO | PRI | NULL |  | 
| Bdate  | date   | YES |  | NULL |  | 
| Address | varchar(30) | YES |  | NULL |  | 
| Sex  | char(1)  | YES |  | NULL |  | 
| Salary | decimal(10,2) | YES |  | NULL |  | 
| Super_ssn | char(9)  | YES | MUL | NULL |  | 
| Dno  | int(11)  | NO |  | NULL |  | 
+-----------+---------------+------+-----+---------+-------+ 

mysql> show columns from PROJECT; 
+-----------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+-------------+------+-----+---------+-------+ 
| Pname  | varchar(15) | NO | UNI | NULL |  | 
| Pnumber | int(11)  | NO | PRI | NULL |  | 
| Plocation | varchar(15) | YES |  | NULL |  | 
| Dnum  | int(11)  | NO | MUL | NULL |  | 
+-----------+-------------+------+-----+---------+-------+ 

mysql> show columns from WORKS_ON; 
+-------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+-------+--------------+------+-----+---------+-------+ 
| Essn | char(9)  | NO | PRI | NULL |  | 
| Pno | int(11)  | NO | PRI | NULL |  | 
| Hours | decimal(3,1) | NO |  | NULL |  | 
+-------+--------------+------+-----+---------+-------+ 
+2

MySQL不支持'/除外intersect'。 – 2013-04-26 07:51:05

+0

那我該用什麼?我有一種感覺,它是「除了」,但它來自書籍所以idk> w < – 2013-04-26 07:52:20

回答

0

你可以改變你這樣的查詢

select 
    Fname, 
    Lname 
from EMPLOYEE 
where not exists(select 
      Pnumber 
     from PROJECT 
     where Dnum = 5) 
    OR EMPLOYEE.Ssn IN(select 
       Pno 
        from WORKS_ON 
        where EMPLOYEE.Ssn = Essn) 
+0

仍然給我錯誤,錯誤1064(42000):你有你的SQL語法錯誤;請檢查與您的MySQL服務器版本對應的手冊,以便在第1行的'IN(從WORKS_ON中選擇Pno,其中EMPLOYEE.Ssn = Essn)'處使用正確的語法。 – 2013-04-26 08:34:16

+0

@SabilaRusyda對不起,它缺少列名 – 2013-04-26 09:14:46

+0

'存在EMPLOYEE。 Ssn IN(...)'?此語法無效。 – 2013-04-26 09:17:19