所以我被问到这个问题:
考虑使用粗体显示键的下列表: Professor(profid,profname、department)、Student(studid,研究名称、专业)和Advise(profid,studid)。
返回与id为“123456789”的学生完全相同的顾问的学生的姓名。
我想出的问题不是返回完全相同的顾问,而是返回在学生123456789和其他学生之间常见的顾问。例如,如果学生123456789有顾问1和2,而学生5只有顾问1,我当前的查询将返回学生5,这是不正确的。这个查询应该只返回同时有1和2两个顾问的学生。
SELECT studname
FROM Student
WHERE studid IN
(
SELECT DISTINCT studid
FROM Advise
WHERE profid IN
(
SELECT profid
FROM Advise
WHERE studid = '123456789'
)
);如何获得此查询以返回建议学生123456789的确切列表?
发布于 2017-12-14 05:07:27
我测试它是否正确运行。你可以试试:
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)发布于 2017-12-14 03:51:32
我的解决办法是找学生不一样的顾问,然后采取消极的这一点。
请尝试使用脚本:
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')发布于 2017-12-14 04:13:45
你在找这个东西吗?
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'
)
)
)https://stackoverflow.com/questions/47805359
复制相似问题