SQL查询左连接问题

时间:2016-06-12 16:39:43

标签: mysql sql

我正在进行查询,但无法正常使用。

我的表格详情如下:

分区:
ID
菲尔兹研究领域

student_subarea:
id主键,
student_id,
student_subarea subarea id和student_subarea的外键。

ASK:
我想要完成的是在一栏中获得所有学习领域,在另一栏中获得学生的ID,如果他在课堂上的话。否则,显示null或其他内容。

SELECT a.`id` ,  a.`name` , a.`area_id` , u. * 
FROM  `subarea` a
LEFT JOIN student_subarea u ON u.subarea_id = a.id
WHERE u.student_id =50
OR u.student_id IS NULL

这样做根本没有帮助。我试图使用函数和子查询没有任何成功。有人可以帮助我。

3 个答案:

答案 0 :(得分:2)

left join和过滤的一般规则是将on子句中的过滤子句放在除第一个表之外的所有子句中。所以这可能会做你想要的:

SELECT a.`id`, a.`name`, a.`area_id`, u. * 
FROM `subarea` a LEFT JOIN
     student_subarea u
     ON u.subarea_id = a.id AND u.student_id = 50;

你怎么记得这个逻辑?即使第二个表上没有匹配项,left join也会返回第一个表中的所有行。这似乎是你想要的。

您的逻辑问题是学生50以外的学生符合逻辑。因此,这些行被过滤掉了。

答案 1 :(得分:0)

将过滤条件移至JOIN

SELECT a.`id` ,  a.`name` , a.`area_id` , u. * 
FROM  `subarea` a
LEFT JOIN student_subarea u 
  ON u.subarea_id = a.id
     AND u.student_id =50

答案 2 :(得分:0)

您应该将条件放在加入条件中的学生ID中,而不是where子句中:

SELECT    a.id,  a.name , a.area_id, u.* 
FROM      subarea a
LEFT JOIN student_subarea u
       ON u.subarea_id = a.id
      AND u.student_id = 50