Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找与其他表中的其他记录不关联的表中的记录_Mysql_Sql - Fatal编程技术网

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'
  • 我发现
    不存在
    左连接
    更适合您的问题描述,尽管两者都有效