Mysql链表排序查询,为什么它工作



我的表是这样的:

+------------------------+
| id | title  | position |
+------------------------+
|  1 | test 2 |        3 |
+------------------------+
|  2 | test 3 |        1 |
+------------------------+
|  3 | test 1 |        0 |
+------------------------+

我发现了这个查询,它根据保存前一个id的位置字段检索排序的行。

SELECT
    *
FROM
    mytable AS t1
LEFT JOIN
    mytable AS t2
ON t2.position = t1.id

我想知道为什么这是工作,因为没有顺序子句和数据库不应该知道位置0是开始的行

结果取决于将行插入表的顺序。例如,如果在插入id=2的行之前插入id=3的行,那么您将得到一个非排序的结果。

现在,你从t1中取出数据的顺序是id因为这是你把元素放入表的顺序

http://sqlfiddle.com/见!2/63a925/2,自己试试。

注意:数据库不能保证像您所说的那样工作,只是大多数数据库都是这样工作的。您应该而不是依赖于此行为,因为模式或查询的一个小更改可能会毁掉您的一整天!还要注意,如果id是一个(主?)键,那么数据库将按照索引的顺序拉出行,这可能会覆盖插入顺序。

根据表1中等于表2中位置的ID加入表2。由于表1中的id是连续的,因此输出看起来是按

排序的。

相关内容

  • 没有找到相关文章

最新更新