Mysql 为什么左连接将第二个表的id保留为空?

Mysql 为什么左连接将第二个表的id保留为空?,mysql,sql,Mysql,Sql,请先参考以下答案: 因此,在这个答案中,它提供了一种基于一个不同列及其对应列获取数据的方法。我理解,它是如何在t1.lastname>t2.lastname或t1.lastname

请先参考以下答案:

因此,在这个答案中,它提供了一种基于一个不同列及其对应列获取数据的方法。我理解,它是如何在t1.lastname>t2.lastname或t1.lastname 我仍然在练习SQL,我对上面链接中提供的方法有疑问

当我尝试选择t2.id时,它全部为空。我不能理解这一点,t2和t1基本上是同一张表吗?如果是这样,它的id怎么可能变为空,而不是t1s id? 当所有t2.id都将返回NULL时,为什么有必要检查t2.id为NULL的位置? 这是我想我有一点想法的一部分。但是,如果我错了,请纠正我。上面的方法起作用了,让我们在这里讨论降序,因为:首先,I LEFT根据它们的ID将我的t1和t2连接在一起。其次,我还检查t1.lastname必须大于t2.lastname,我假设它使用的是ASCII或UNICODE值,这返回给我瞧!只有一个结果;具有更高值的一个。好的,还有一个问题:它是否逐个检查t1.lastname和t2.lastname,但检查所有t2.lastname,然后如果只有一个t2.lastname使该条件无效,则不返回任何内容?
我想我在这里遗漏了一些东西。谁能帮帮我吗?提前感谢。

左连接将显示左表中JoinValue的左部分,并将显示:

若联接条件为,则联接右侧部分的右表中的值 完成或 如果未满足联接条件,则为空值 例如:

   INSERT INTO #test (id, firstname, lastname)
   VALUES
   (1, 'A', 'A'),
   (2, 'B', 'B'),
   (3, 'A', 'B'),
   (4, 'B', 'C')

   SELECT t1.*, t2.*
   FROM #test AS t1
   LEFT JOIN #test AS t2
   ON t1.firstname = t2.firstname
   AND t1.lastname < t2.lastname
它显示t1中的所有行,但最后两行的t2将为空,因为连接条件t1.lastname 如果现在添加WHERE条件:

SELECT t1.*, t2.*
FROM #test AS t1
LEFT JOIN #test AS t2
ON t1.firstname = t2.firstname
AND t1.lastname < t2.lastname
WHERE t2.id IS NULL;

您将结果限制为未满足联接条件的行。

MySQL不支持表语法这是SQL Server{MSSQL SYNTAX谢谢。由于某些限制,我还不能对你的答案进行投票,但我已经接受了你的答案。一般来说,一个开始提到上一个答案的问题不会受到欢迎。@GordonLinoff,我明白了。那么,我如何获得对上一个答案的澄清?
SELECT t1.*, t2.*
FROM #test AS t1
LEFT JOIN #test AS t2
ON t1.firstname = t2.firstname
AND t1.lastname < t2.lastname
WHERE t2.id IS NULL;