[英]SQL query to return an exact list of subquery
所以我得到了這個問題:
考慮以下表鍵進行加粗:教授(PROFID,profname,系)學生(studid,studname,主要),並建議(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的學生的確切列表?
我測試它運行正確。 你可以試試:
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)
我的解決方案是找到學生不同的顧問,然后對此不予理睬。
請嘗試使用腳本:
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')
你在尋找一些東西嗎?
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'
)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.