2013-08-31 30 views
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))); 

,並得到了以下錯誤:

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 DISTINCT F.FNAME 
FROM FACULTY F 
LEFT JOIN CLASS C ON C.FID = F.FID 
WHERE C.FID IS NULL 

,並得到了 「空集」,即使在我的數據庫有一個去所有房間的教師。

+2

也請不要標記MySQL的問題爲'SQL-server'。 –

+0

考慮提供同樣的sqlfiddle – Strawberry

回答

1

當您使用except兩個表必須compatible,試試這個:

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

編輯

問題被標記到SQL Server,所以我給的答案牢記這一點,對於MySQL的使用:

SELECT FID, COUNT(*) FROM 
(
    (SELECT DISTINCT f.fname, f.fid, c1.room 
    FROM faculty f 
    JOIN class c1 
    ON f.fid = c1.fid) tb1 
JOIN 
    (SELECT DISTINCT room AS room2 FROM class) tb2 
ON tb1.room = tb2.room2 
) 
GROUP BY FID 
HAVING COUNT(*) IN (SELECT COUNT(DISTINCT Room) FROM Class); 

小提琴:http://sqlfiddle.com/#!8/cff12/4

+0

在MySQL –

+0

@a_horse_with_no_name中沒有'EXCEPT'編輯答案。 –

+0

@synder根據你的查詢,我得到了所有這些院系的fid和計數值誰超過一個類的列表。我希望fname和fid適合那些去所有房間的人,無論數量和班級名稱如何。請檢查我的兩個表提到的問題。 –

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 fiddle

+0

根據你的查詢,我得到了所有那些不止一個班的院系fid的清單。我希望fname和fid適合那些去所有不同房間的人,而不論數量和班級名稱。請檢查我的兩個表提到的問題 –

相關問題