首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询以返回准确的子查询列表。

SQL查询以返回准确的子查询列表。
EN

Stack Overflow用户
提问于 2017-12-14 03:19:58
回答 3查看 153关注 0票数 3

所以我被问到这个问题:

考虑使用粗体显示键的下列表: Professor(profid,profname、department)、Student(studid,研究名称、专业)和Advise(profidstudid)。

返回与id为“123456789”的学生完全相同的顾问的学生的姓名。

我想出的问题不是返回完全相同的顾问,而是返回在学生123456789和其他学生之间常见的顾问。例如,如果学生123456789有顾问1和2,而学生5只有顾问1,我当前的查询将返回学生5,这是不正确的。这个查询应该只返回同时有1和2两个顾问的学生。

代码语言:javascript
复制
SELECT studname
FROM Student
WHERE studid IN 
(
    SELECT DISTINCT studid
    FROM Advise
    WHERE profid IN
    (
        SELECT profid
        FROM Advise
        WHERE studid = '123456789'
    )
);

如何获得此查询以返回建议学生123456789的确切列表?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-14 05:07:27

我测试它是否正确运行。你可以试试:

代码语言:javascript
复制
SELECT a.studid, b.studname
FROM (
    SELECT studid, COUNT(studid) AS numstud
    FROM Advise 
    WHERE 
        profid IN (
            SELECT profid FROM Advise WHERE studid = 123456789
        ) AND 
        studid NOT IN (
            SELECT studid FROM Advise WHERE profid NOT IN (
                SELECT profid FROM Advise WHERE studid = 123456789
            )
        )
    GROUP BY studid
    HAVING numstud = (SELECT COUNT(*) FROM Advise WHERE studid = 123456789)
) AS a LEFT JOIN Student AS b ON (a.studid = b.studid)
票数 2
EN

Stack Overflow用户

发布于 2017-12-14 03:51:32

我的解决办法是找学生不一样的顾问,然后采取消极的这一点。

请尝试使用脚本:

代码语言:javascript
复制
   SELECT studid,studname
FROM Student
WHERE studid  not in
(
   select studid
   from
   (
    SELECT a.studid, b.profid
    FROM Advise a
    left join
    (
        SELECT profid
        FROM Advise
        WHERE studid = '123456789'
    ) b on b.profid = a.profid
    where a.studid not like '123456789'
    ) x
    where x.profid is null
)
group by studid,studname
having count(*) = (SELECT count(profid) FROM Advise WHERE studid = '123456789')
票数 0
EN

Stack Overflow用户

发布于 2017-12-14 04:13:45

你在找这个东西吗?

代码语言:javascript
复制
select studname from Student where studid in 
(
  select studid from ( 
     select studid, GROUP_CONCAT(profid) profs from  advice 
     group by studid having profs in ( 
          select studid, GROUP_CONCAT(profid) profs from  advice group by 
          studid having studid = '123456789' 
     )
  ) 
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47805359

复制
相关文章

相似问题

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