Mysql 查找与其他表中的其他记录不关联的表中的记录
我有三张桌子:Mysql 查找与其他表中的其他记录不关联的表中的记录,mysql,sql,Mysql,Sql,我有三张桌子: list_routes pk_route_id route_code route_name route_description 3 J1 IND IND-DPS 4 J4 ADT ADT_DPS tbl_stu_route pk_stu_route_id fk_stu_cls_id fk_route_id 2
list_routes
pk_route_id route_code route_name route_description
3 J1 IND IND-DPS
4 J4 ADT ADT_DPS
tbl_stu_route
pk_stu_route_id fk_stu_cls_id fk_route_id
2 13 3
tbl_stu_class
pk_stu_cls_id fk_stu_id
13 56
现在我想要实现的是在MYSQL中编写查询,它将从列表路径中获取记录,而列表路径没有关联或附加在tbl_stu_类中,因此,例如在上述场景中,它应该给我输出:
pk_route_id route_code route_name route_description
4 J4 ADT ADT_DPS
我使用左外部联接编写了下面的查询
SELECT
a.pk_route_id,
a.route_code,
a.route_name,
a.route_description
FROM
list_routes a
left outer join tbl_stu_route b on a.pk_route_id=b.fk_route_id
left outer join tbl_stu_class c on b.fk_stu_cls_id=c.pk_stu_cls_id
where c.fk_stu_id ='56'
但产出是有限的
pk_route_id route_code route_name route_description
3 J1 IND IND-DPS
我不确定我会错在哪里。您能告诉我如何查看此记录吗?如果您想获取不存在的记录,则只需使用为NULL进行筛选即可
SELECT a.*
FROM list_routes a
left outer join tbl_stu_route b on a.pk_route_id=b.fk_route_id
left outer join tbl_stu_class c on b.fk_stu_cls_id=c.pk_stu_cls_id
where b.fk_route_id is null;
鉴于你问题的性质,我将使用不存在
:
SELECT lr.*
FROM list_routes lr
WHERE NOT EXISTS (SELECT 1
FROM tbl_stu_route sr JOIN
tbl_stu_class c
ON sr.fk_stu_cls_id = c.pk_stu_cls_id
WHERE lr.pk_route_id = sr.fk_route_id AND
c.fk_stu_id = 56
);
注:
- 使用表别名时,请使用表名称的缩写。缩写使查询比随机字母更容易理解
- 不要对数值常量使用单引号。我假设您的ID是数字,因此
56
而不是'56'
- 我发现
不存在
比左连接
更适合您的问题描述,尽管两者都有效