目前我有两个表,students
和 schools
。它们通过 school_id
(在 students
中)和 id
(在 schools
中)连接。如果它有什么意义的话,这是来自带有 MYSQL 数据库的 cakePHP 应用程序,我使用 SQLwave 来运行查询。
我想要做的是生成一份特定学校 graduation_year
列为 2016 年的学生列表。我使用了以下查询,目的是生成学生的姓名、学校名称和毕业年份:
SELECT DISTINCT students.first_name, students.last_name, schools.name, students.graduation_year
FROM students JOIN schools
ON schools.id = students.school_id
WHERE schools.name = "Central City High School"
OR schools.name = "Gotham High School"
OR schools.name = "Metropolis High School"
OR schools.name = "Ivy Town High School"
AND students.graduation_year = 2016;
但是,当我运行查询时,我得到了这些学校的所有学生的列表,而不仅仅是 2016 年毕业的学生(即,我得到了那些没有列出毕业年份的学生,2014 年、2016 年等) 。我如何改进此代码以仅显示 2016 年毕业的学生?预先感谢您。
最佳答案
由于 AND
位于 OR
之前,因此您必须将 school.name 条件放在括号内。
SELECT DISTINCT students.first_name, students.last_name, schools.name, students.graduation_year
FROM students JOIN schools
ON schools.id = students.school_id
WHERE (schools.name = "Central City High School"
OR schools.name = "Gotham High School"
OR schools.name = "Metropolis High School"
OR schools.name = "Ivy Town High School")
AND students.graduation_year = 2016;
但是,使用 IN
会使代码更漂亮:
SELECT DISTINCT students.first_name, students.last_name, schools.name, students.graduation_year
FROM students JOIN schools
ON schools.id = students.school_id
WHERE schools.name IN ("Central City High School", "Gotham High School",
"Metropolis High School", "Ivy Town High School")
AND students.graduation_year = 2016;
关于MYSQL/SQLWave - 从 Join 生成不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126797/