MYSQL/SQLWave - 从 Join 生成不同的数据

标签 mysql sql join relational-database

目前我有两个表,studentsschools。它们通过 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/

相关文章:

mysql - 在加入主表之前对子查询中的多对一元素求和

python - Mysql 在一个查询中进行转换和比较?

mysql - 创建MySQL函数时出现语法错误

sql - 如何在 SQL 中随机执行部分外连接

sql - 为什么调用 take() 方法时 Slick 会生成子查询

同一表中的Mysql子查询COUNT返回NULL

sql - 左连接的最佳(连接)顺序

mysql 在删除前获取字段值

php - 警告:mysqli_select_db()期望参数1为mysqli,第13行给出的字符串

sql - 如何在sql server中使用正则表达式?