0

私のmysqlデータベースには、次のテーブルがあります。

FACULTY (fid int, fname varchar(25), deptid int, primary key(fid))  
CLASS (name varchar(4),meets_at varchar(9),room varchar(4), fid int,primary key (name), foreign key (fid) references faculty (fid))  

すべての部屋に通っている学部名を選びたい。私は次を使用してみました:

SELECT DISTINCT F.FNAME   
FROM FACULTY F  
WHERE NOT EXISTS (( SELECT *  
FROM CLASS C  
EXCEPT  
(SELECT C1.ROOM  
FROM CLASS C1  
   WHERE C1.FID=F.FID))); 

次のエラーが発生しました:

エラー 1064 (42000): SQL 構文にエラーがあります。near 'EXCEPT を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

も試しました:

SELECT DISTINCT F.FNAME   
FROM FACULTY F   
LEFT JOIN CLASS C ON C.FID = F.FID  
WHERE C.FID IS NULL  

私のデータベースにすべての部屋に行く教員がいる場合でも、「空のセット」を取得しました。

4

2 に答える 2

0

あなたの問題に関連する私の見解。

SELECT T.fid FROM
  (SELECT f.fid FROM 
     faculty f LEFT JOIN class c ON f.fid = c.fid) T
  GROUP BY T.fid 
  HAVING(
    COUNT(T.fid) = (SELECT COUNT(DISTINCT room) FROM class))

SQLフィドル

于 2013-08-31T22:15:22.353 に答える