mysql - 如何从MySQL表中获取多列具有相同值的所有行?

标签 mysql sql rdbms

我有一个学生表,其中包含 rollNumber、majorSubject、minorSubject、fullName 列。

现在给定一个 rollNumber,如何查找与具有给定 rollNumber 的学生具有相同majorSubject、minorSubject 的所有学生。

我想到了什么:

SELECT * FROM students WHERE
majorSubject IN (SELECT majorSubject FROM students WHERE rollNumber='<rollNumber>') AND
minorSubject IN (SELECT minorSubject FROM students WHERE rollNumber='<rollNumber>')

如您所见,我运行了相同的子查询两次。我确信应该有一个优化或更好的方法来做到这一点。

最佳答案

SELECT allSt.* 
FROM students allSt
join students st 
-- check the same majorSubject AND the same minorSubject --
on allSt.majorSubject = st.majorSubject and allSt.minorSubject = st.minorSubject 
WHERE
st.rollNumber = '<rollNumber>' AND
-- exclude student with the given rollNumber from the result set --
allSt.rollNumber <> '<rollNumber>'

关于mysql - 如何从MySQL表中获取多列具有相同值的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893459/

相关文章:

mysql - 将冗余数据存储在 RDBMS 中以简化查询是否合理?

mysql - Magento 升级 1.3 和 INNODB/MYISAM

mysql - 在插入之前检查重复项的插入语句

python - 如何使用 SQLAlchemy from_select 插入选择?

database - 为什么 PostgreSQL 会吃掉我所有宝贵的 HD 空间?

mySQL:在性能受到影响之前表中有多少行?

MySQL 按最后一个条目分组

MySQL Group By 显示最新结果

php - 数据库结构跟踪用户是否打开特定内容的最佳实践?

mysql - 与 SQL 中的另一个条目相比列出较晚的日期