2011-02-17 82 views
0

說我的員工表,其中任何員工可以與任何其他僱員(多對多)。每位員工都有許多獨立存儲的特性。sql結果集的順序定義?

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的另一個即如果emp22 & emp43通過「XXX」相關然後我得到字符之後。通過這種方式,我可以知道哪兩名員工相關(哪些是必需的)。但是,我想知道這個命令是否僅僅是運氣,還是定義明確的。這是在SQLite中。

如果沒有定義的方式,怎麼還能做什麼呢?另外,我需要知道他們各自的角色。我想最好在一個查詢中完成它。你能想到其他的一些查詢嗎?

由於提前,
馬尼什

PS:這些都不是實際表。他們在這裏提出問題的簡單性。

+3

一般來說,如果你沒有明確指定'ORDER'在SQL那麼你可以以任意順序的結果,當然,這是我已經與SQLServer的... –

回答

4

在SQL中,結果的順序是不確定的,除非你有你的查詢明確ORDER BY條款。所以我相信你想要的:

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 

我傾向於在末尾添加一個唯一的字段(如主鍵),當有多個記錄中的所有其他訂單項進行匹配,如果沒有收到明顯的排序,至少得到確定性排序。但這主要是風格和選擇的問題。這絕不是必需的。

+0

感謝經歷。但我不需要根據empid排序結果。我無法知道哪些員工是相關的。就像我曾經說過的,爲了讓相關的ID一個接一個地出現,我得到了empids。類似於:「emp21,emp20,emp24,emp14,emp45,emp02」。這裏的關係是(emp21,emp20),(emp24,14)等等。如果我執行ORDER BY empid,我需要這種關係。 – Manish

+0

那麼我相信你最好的選擇是引入從它們應該出現的順序計算莫名其妙一些領域。無論哪種方式,沒有明確的'ORDER BY',排序是未定義的。許多RDBM將按照插入的順序返回行,但不能依賴此行爲。 –