是否定义了sql结果集顺序?

是否定义了sql结果集顺序?,sql,sqlite,many-to-many,Sql,Sqlite,Many To Many,假设我有一个employee表,其中任何员工都可以与任何其他员工(多对多)关联。每个员工都有许多单独存储的特征 emp: id,name related: name,emp1role,emp1id,emp2role,emp2id chars: empid,name,value 我想了解通过“xxx”与关系相关的员工的所有特征。我当前正在使用此查询: SELECT c.empid, c.Name, c.Value FROM chars as c, related as r WHERE r.nam

假设我有一个employee表,其中任何员工都可以与任何其他员工(多对多)关联。每个员工都有许多单独存储的特征

emp: id,name
related: name,emp1role,emp1id,emp2role,emp2id
chars: empid,name,value
我想了解通过“xxx”与关系相关的员工的所有特征。我当前正在使用此查询:

SELECT c.empid, c.Name, c.Value
FROM chars as c, related as r
WHERE r.name='xxx' AND (r.emp1id=c.empid OR r.emp2id=c.empid)
这是可行的,它会一个接一个地给相关员工,即如果emp22和emp43通过“xxx”关联,那么我将获得emp43的CHAR,然后是emp22,依此类推。这样我就能知道哪两个员工是相关的(这是必需的)。然而,我想知道这个顺序是仅仅是运气还是定义明确。这是在SQLite中

如果没有定义,我还能怎么做?另外,我需要知道他们各自的角色。我想最好在一个查询中完成。你能想出其他问题吗

提前感谢,
曼尼什语


附:这些不是实际的表格。在SQL中,结果的顺序是未定义的,除非查询中有一个明确的
orderby
子句。所以我相信你想要:

SELECT c.empid, c.Name, c.Value
FROM chars as c, related as r
WHERE r.name='xxx' AND (r.emp1id=c.empid OR r.emp2id=c.empid)
ORDER BY c.empid ASC

我倾向于在末尾添加一个唯一的字段(例如主键),以便在所有其他顺序字段中都有多个记录匹配时,如果不能获得明显的顺序,至少可以获得确定的顺序。但这主要是风格和选择的问题;这绝对不是必需的。

在SQL中,结果的顺序是未定义的,除非在查询中有一个显式的
orderby
子句。所以我相信你想要:

SELECT c.empid, c.Name, c.Value
FROM chars as c, related as r
WHERE r.name='xxx' AND (r.emp1id=c.empid OR r.emp2id=c.empid)
ORDER BY c.empid ASC

我倾向于在末尾添加一个唯一的字段(例如主键),以便在所有其他顺序字段中都有多个记录匹配时,如果不能获得明显的顺序,至少可以获得确定的顺序。但这主要是风格和选择的问题;这绝对不是必需的。

一般来说,如果您没有在SQL中明确指定
顺序
,那么您可以以任意顺序获得结果,当然,这就是我在SQLServer中所经历的……一般来说,如果您没有在SQL中明确指定
顺序
,那么您可以以任意顺序获得结果,当然,这就是我对SQLServer的体验…谢谢。但我不需要根据empid对结果进行排序。我无法知道哪些员工是相关的。就像我说过的,我得到empid的顺序是相关id一个接一个地出现。比如:“emp21,emp24,emp14,emp45,emp02”。这里的关系是(emp21,emp20),(emp24,14)等等。我需要这个关系,如果我按empid排序,这个关系就会丢失。那么我相信你最好的选择是引入一些字段,这些字段是根据它们应该出现的顺序计算出来的。无论采用哪种方式,如果没有明确的ORDER BY,则顺序是未定义的。许多RDBMs将按插入的顺序返回行,但这种行为不可靠。谢谢。但我不需要根据empid对结果进行排序。我无法知道哪些员工是相关的。就像我说过的,我得到empid的顺序是相关id一个接一个地出现。比如:“emp21,emp24,emp14,emp45,emp02”。这里的关系是(emp21,emp20),(emp24,14)等等。我需要这个关系,如果我按empid排序,这个关系就会丢失。那么我相信你最好的选择是引入一些字段,这些字段是根据它们应该出现的顺序计算出来的。无论采用哪种方式,如果没有明确的ORDER BY,则顺序是未定义的。许多RDBMs将按插入的顺序返回行,但这种行为不可靠。