簡體   English   中英

SQL查詢返回子查詢的確切列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM