【问题标题】:MySql Join Query left joinMySql Join 查询左连接
【发布时间】:2013-04-24 02:52:56
【问题描述】:

我的表名 students 包含字段 student_id、house_id 等。 和科目,房子,学生_科目

我正在使用这个查询

SELECT students_subjects.student_id,students.house_id,students_subjects.subject_id,subjects.subject_name,students.rollno,students.first_name, students.last_name FROM 
students_subjects LEFT JOIN students on students_subjects.student_id=students.id
LEFT JOIN subjects on students_subjects.subject_id=subjects.id  WHERE students_subjects.class_years_section_id=1 

这对我来说很好用..

现在我也想从房屋表中获取房屋名称

我试过这个查询

SELECT students_subjects.student_id,students.house_id,houses.house_name, students_subjects.subject_id,subjects.subject_name,students.rollno,students.first_name, students.last_name FROM 
students_subjects LEFT JOIN students on students_subjects.student_id=students.id
LEFT JOIN subjects on students_subjects.subject_id=subjects.id 

在students.house_id=houses.id 上左连接房屋 WHERE students_subjects.class_years_section_id=1

AND students_subjects.school_session_id=1 AND students.is_active=1

它给了我 house_name = NULL

谁能告诉我如何获得房屋名称。使用连接查询

谢谢

【问题讨论】:

  • 这是常见的MySQL knowledge。您不能在 WHERE 语句之后放置 JOIN

标签: php mysql sql


【解决方案1】:

您查询中的错误是由WHERE 子句之后的LEFT JOIN 关键字引起的,

SELECT  students_subjects.student_id,
        students.house_id,
        students_subjects.subject_id,
        subjects.subject_name,
        students.rollno,
        students.first_name, 
        students.last_name 
FROM    students_subjects 
        LEFT JOIN students 
            on students_subjects.student_id=students.id
        LEFT JOIN subjects 
            on students_subjects.subject_id=subjects.id
        LEFT JOIN houses 
            on students.house_id=houses.id
WHERE   students_subjects.class_years_section_id = 1 AND 
        students_subjects.school_session_id = 1 AND 
        students.is_active = 1

记住JOINs 是FROM 子句的一部分。


更新 1

SELECT  b.student_id,
        a.house_id,
        b.subject_id,
        c.subject_name,
        a.rollno,
        a.first_name, 
        a.last_name,
        d.house_name            
FROM    students a
        INNER JOIN students_subjects b
            ON b.student_id = a.id
        INNER JOIN subjects  c
            ON b.subject_id = c.id
        INNER JOIN houses d
            ON a.house_id = d.id
WHERE   b.class_years_section_id = 1 AND 
        b.school_session_id = 1 AND 
        a.is_active = 1

【讨论】:

  • 您还想了解什么?
  • 我也在尝试从房屋表中获取房屋名称。但它显示我为空
  • 首先,你能解释一下你想做什么吗?我看到您正在从所有表中加入 students_subjects。如果没有学生,那么房子的价值显然是空的。
  • 我有表学生,其中我有字段 house_id,另一个名为 house 的表具有字段 id、house_name 和 students_subjects 表具有字段 student_id。
  • 现在我也需要获取房屋名称
【解决方案2】:

你错过了WHERE 子句,试试这个:

SELECT students_subjects.student_id,students.house_id,students_subjects.subject_id,subjects.subject_name,students.rollno,students.first_name, students.last_name 
FROM students_subjects 
     LEFT JOIN students ON students_subjects.student_id=students.id
     LEFT JOIN subjects ON students_subjects.subject_id=subjects.id  
     LEFT JOIN houses ON students.house_id=houses.id
WHERE students_subjects.class_years_section_id=1 
AND students_subjects.school_session_id=1 AND students.is_active=1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多