左外连接的错误

Posted ykpkris

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左外连接的错误相关的知识,希望对你有一定的参考价值。

题目:查询小尹老师底下所有的学生

create database test;
use test;
create table stu(
    id bigint,
    classID bigint,
    name varchar(10)
    );
create table class(
    id bigint,
    teacherID bigint
    );
create table teacher(
    id  bigint,
    name varchar(10)
    );
    
 insert into stu values(1,2,‘马哥‘);
 insert into class values(1,2);
 insert into teacher values(2,‘小尹‘);
 update class set id = 1 where id = 2;

错误的 因为左外连接 尽量保存左表的数据 on的条件相当于没有

SELECT S.* FROM `stu` S LEFT JOIN class C on S.classID = C.id
LEFT JOIN teacher T on C.teacherID = T.id and T.name = "小尹";

正确的

 SELECT S.* FROM `teacher` T LEFT JOIN class C on T.id = C.teacherID
LEFT JOIN stu S on S.classID = 2 and T.name = "小尹";

以上是关于左外连接的错误的主要内容,如果未能解决你的问题,请参考以下文章

左外连接的错误

LINQ 左外连接查询错误:OuterApply 没有适当的键

Linq表达式多个左外连接错误

在 Redshift 更新查询中使用左外连接导致错误:目标表必须是等连接谓词的一部分

左外连接代码的不明确列名

SQL - 范围之间的左外连接