繁体   English   中英

SQL查询左联接问题

[英]SQL query left join issue

我正在查询,但无法正常工作。

我的表格详细信息如下:

分区:
ID
研究领域

student_subarea:
id主键,
学生卡 ,
student_subarea分区ID和student_subarea的外键。

问:
我要完成的工作是在一列中获得所有学习领域,而在另一列中获得学生的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

这样做完全没有帮助。 我尝试使用函数和子查询没有成功。 可以帮我一下。

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学生以外其他学生都符合逻辑。 因此,这些行将被过滤掉。

将过滤条件移至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

您应该将条件放在连接条件内的学生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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM