[英]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.