首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql查找所有属于不同组的所有实例。

sql查找所有属于不同组的所有实例。
EN

Stack Overflow用户
提问于 2017-07-23 22:35:09
回答 3查看 52关注 0票数 0

我肯定有一个类似的问题已经被问过并回答过了,但是我还没有找到任何搜索中的东西,请温柔点。

我想知道数据库中所有在一幢楼的每个房间里教书的教员的名字。桌子空空如也,但它们是:

代码语言:javascript
复制
class:
+--------+---------+------+------+
| cname  | meetsat | room | fid  |
+--------+---------+------+------+
| class  | 8       | R128 |    5 |
| class2 | 9       | R129 |    6 |
| class3 | 9       | R128 |    5 |
+--------+---------+------+------+

faculty:
+-----+---------------+--------+
| fid | fname         | deptid |
+-----+---------------+--------+
|   5 | i.teach       |    999 |
|   6 | other guy     |    998 |
|   8 | another woman |    997 |
+-----+---------------+--------+

到目前为止,通过与其他用户的讨论,我已经:

代码语言:javascript
复制
(SELECT f.fname
FROM faculty f, class c
WHERE f.fid = c.fid)
UNION
(select c.fid
from class c
group by c.fid
having count(distinct room) = (select count(distinct c2.room) from class 
c2));

当前输出:+

预期产出应是:

代码语言:javascript
复制
+---------+
| fname   |
+---------+
| i.teach |
+---------+

我想我只需要正确地加入。我所拥有的课程教材非常简陋,在概念教学方面也不多,所以我不知道在不同的情况下该由谁来运用它们。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-23 23:07:35

这里有一个查询,可以实现您所需的比较计数算法。这是戈登发表的文章的另一种选择

代码语言:javascript
复制
SELECT * FROM

  (SELECT count(distinct room) as countAllRooms FROM class) ar
  INNER JOIN
  (SELECT c.fid, count(distinct c.room) as countRoomsPerTeacher FROM class c GROUP BY c.fid) rpt
  ON
    rpt.countRoomsPerTeacher = ar.countAllRooms


  INNER JOIN 
  faculty f
  ON
    f.fid = rpt.fid

关于你对戈登的回答的质疑,加入教职员工最安全的方法是:

代码语言:javascript
复制
Select * from faculty inner join 
(
select c.fid
from class C
group by c.fid
having count(distinct room) = (select count(distinct c2.room) from class c2)
) ff 
on ff.fid = faculty.fid

我通常不会像这样格式化sql,但我这样做是为了显示我添加了哪些位,哪些位是Gordon的

您应该避免尝试将he教员表加入到执行分组的内部查询中,因为这将迫使您向选择列表中添加更多列,这将迫使您向组中添加更多列,这会打破计数,最好将Gordon的查询视为独立运行的“教员查找器”,作为子查询并在稍后加入。

票数 1
EN

Stack Overflow用户

发布于 2017-07-23 22:59:33

你在找having

代码语言:javascript
复制
select c.fid
from class c
group by c.fid
having count(distinct c.room) = (select count(distinct c2.room) from class c2);

获取名称只是加入faculty表的问题。

票数 1
EN

Stack Overflow用户

发布于 2017-07-23 22:45:08

内线怎么样不然我就不明白你的问题了。

代码语言:javascript
复制
Select f.name from faculty f inner join class c on f.fid=c.fid
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45270485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档