sql - 为什么表的顺序在自连接中很重要

标签 sql join inner-join

这是我的表格和查询作为 fiddle 。这会产生正确的结果,或者我正在寻找的结果。在此查询中,m1 首先出现,然后是 m2,正如您在“...microposts m1 inner join microposts m2...”行中看到的那样

SELECT *
FROM microposts m1
INNER JOIN microposts m2
ON m1.ancestry = m2.id AND m2.user_id=1 AND m1.user_id=2

http://sqlfiddle.com/#!2/ec0c88/3

现在,如果你切换 m1 和 m2(即“...微帖子 m2 内连接微帖子 m3...”,则会返回“原始帖子”(该微帖子是“回复帖子”的祖先)。

select *
from microposts m2
inner join microposts m1
on m1.ancestry = m2.id and m2.user_id=1 and m1.user_id=2

http://sqlfiddle.com/#!2/ec0c88/2

我的应用程序中的一切都工作正常,我只是想更好地理解自连接。因为我将它们概念化的方式,我不会预料到这些结果。

感谢您向我介绍 SQLFiddle。非常酷。

最佳答案

因为它们是不同的查询。 首先有:

m2.user_id=105

第二个有:

m2.user_id=1 and m1.user_id=105

显然结果是不同的。

关于sql - 为什么表的顺序在自连接中很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072124/

相关文章:

MySQL列出一个表中的所有行,不包括另一表已引用的行

mysql - 获取同一表中列中具有匹配值的行

sql - SQL Server连接表和数据透视

Mysql Join查询与相同日期的计数表记录

mysql - 如何通过检查两列值来获取每组的最高值

MySQL计算出现次数并连接回同一个表

SQL:查找在某个类别中没有支出的客户

sql - nodejs mssql - 传递的参数太多存储过程

mysql - 连接表 a 到表 b 在匹配子字符串上的效率低下......想法?

php - 如何使用 LIKE 忽略 mysql 搜索查询中的空格?