"In" 的数据库查询似乎已排序

DB queries with "In" seem to be sorted

两个table有客户(公司)和联系人。联系人和客户都有自己的字段。但它们都有一个 id,它是一个主键。此外,客户和联系人之间存在“链接”——可以为每个客户分配一个联系人,反之亦然。为此还有第三个 table,称为 'assignment',它只有两个字段 - 公司 ID 和联系人 ID。

假设我们将 ID 为 3 的联系人链接到 ID 为 12076 的公司。接下来,我们将 ID 为 10 的联系人和 ID 为 5 的最后一个联系人链接起来。查看我们的结果:

SELECT contactId FROM assignment WHERE companyId = 12076;

结果正确-

完成这些步骤后,有时我需要获取与我需要的公司关联的联系人字段。有一个公司12076,我需要获取所有关联的联系人字段。我提出了这样的要求:

SELECT id, fullName FROM contacts WHERE contacts.rowid IN (SELECT contactId FROM assignment WHERE companyId = 12076);

此请求显示我需要的联系人及其字段。恰好有 3 个联系人,但存在一个问题 - 它们按排序顺序显示,按 ID 排序。

我需要按添加顺序显示联系人字段。我怎么能这样做?也许我需要使用 JOIN?

默认情况下,SQLite table 有一个 Rowid 列。我们可以在 ORDER BY 中使用这一列。 如果我们希望 ContactId 按照它们插入 table 联系人的顺序排列,我们可以加入联系人并按其 R​​owid 排序。
请参阅 [https://www.sqlitetutorial.net/sqlite-autoincrement/][1]

create table companies(id int);
create table contacts (id int);
create table assignment(companyId int,contactId int);
insert into companies values(12076);
insert into contacts values(10),(3),(5);
insert into assignment values (12076,3),(12076,10),(12076,5);
SELECT a.contactId 
FROM assignment a
JOIN contacts c
on a.contactId = c.id
WHERE companyId = 12076
order by c.Rowid;
| contactId |
| --------: |
|        10 |
|         3 |
|         5 |

db<>fiddle here