【问题标题】:select everything from a table for a column从表中为一列选择所有内容
【发布时间】:2013-08-31 18:15:06
【问题描述】:

在我的 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):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'EXCEPT

附近使用的语法

也尝试过:

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

即使在我的数据库中,有一个教员去所有房间,也得到了“空集”。

【问题讨论】:

  • 另外请不要将MySQL问题标记为sql-server
  • 考虑提供一个相同的 sqlfiddle

标签: mysql mysql-5.0


【解决方案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

【讨论】:

  • MySQL 中没有EXCEPT
  • @synder 根据您的查询,我正在获取所有那些上过一门以上课程的学院的 fid 和 count 值的列表。我想要 fname 和 fid 给那些去所有房间的人,而不管计数和班级名称。请检查我提到的两个表的问题。
  • @UmangAgrawal 您如何获得不止一个,例如。在这个sqlfiddle.com/#!2/9f25e/5 A 进入每个房间,即。 RARB。你能给我一个没有得到预期结果的例子吗?
  • @synder:请参阅以下内容:sqlfiddle.com/#!8/cff12/1 其中只有 fid 88451 和 fname 教授 Snehashu Saha 的教师会去两个房间,即 R102 和 R128,而 Bidisha 女士和 Saraswathi 女士只去 R102两个不同的班级。我想要的是去所有不同教室的教师的名字。
  • @synder: 是的,这是工作...但是如果我不想显示计数和 fid 怎么办???
【解决方案2】:

我的观点与您的问题有关。

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

【讨论】:

  • 根据您的查询,我正在获取所有那些上过一门以上课程的学院的 fid 列表。我想要 fname 和 fid 用于那些去所有不同房间的人,而不管计数和班级名称。请检查我提到的两个表问题
猜你喜欢
  • 2016-01-20
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2011-03-30
  • 1970-01-01
  • 2022-09-28
  • 2021-12-30
相关资源
最近更新 更多