mysql - SQL 查询返回子查询的精确列表

标签 mysql sql

所以我得到了这个问题:

考虑下表中的粗体键:Professor(profid, profname, department) Student(studid, studname, major) 和 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 的学生的确切列表?

最佳答案

我测试它运行正常。你可以试试:

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)

关于mysql - SQL 查询返回子查询的精确列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805359/

相关文章:

php - SQL Insert 由于某种原因不起作用

mysql - 这个查询写得好吗?我对此很陌生,想知道是否有更好的方法来编写它

mysql - 如何获得同时创建的最后 3 个组?

mysql - 在 phpMyAdmin 中将 mysql 导出为 ASCII

php - 使用 php/mysql 在数据集之间显示/创建空白行并打破表数据

c# - AWS Lambda、.Net Core 和 MySql : Could not load file or assembly 'System. Diagnostics.TraceSource,版本 = 4.0.0.0

SQL获取小于或等于日期时间参数的最大记录

javascript - Sequelize-cli:在播种文件之前预运行另一个种子文件?

PHP/MySQL - 查询循环?

java - JDBC 问题 : not being able to correctly bind variables and values (shortened)