определен порядок набора результатов? - PullRequest
0 голосов
/ 17 февраля 2011

Скажем, у меня есть таблица сотрудников, где любой сотрудник может быть связан с любым другим сотрудником (многие ко многим). Каждый сотрудник имеет много характеристик, которые хранятся отдельно.

emp: id,name
related: name,emp1role,emp1id,emp2role,emp2id
chars: empid,name,value

Я хочу получить все характеристики сотрудников, которые связаны через «ххх» вместе с отношением. Я сейчас использую этот запрос:

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, сопровождаемые emp22 и так далее. Таким образом, я могу узнать, какие два сотрудника связаны (что необходимо). Тем не менее, я хочу знать, является ли этот порядок просто удачей или он четко определен. Это в SQLite.

Если это не определено способом, как еще я могу это сделать? Кроме того, мне нужно знать их соответствующие роли. Я хочу предпочтительно сделать это в одном запросе. Можете ли вы вспомнить какой-нибудь другой запрос?

Заранее спасибо,
Manish

PS: это не фактические таблицы. Они здесь для простоты задавания вопроса.

1 Ответ

4 голосов
/ 17 февраля 2011

В 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

Я имею тенденцию добавлять уникальное поле (например, первичный ключ) в конце, чтобы, если нет, получить очевидный порядок, когда есть несколько записей, совпадающих во всем другом порядкеполя, по крайней мере, получают детерминированный порядок.Но это в основном вопрос стиля и выбора;это ни в коем случае не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...