У меня есть раздражающий SQL-оператор, который кажется простым, но выглядит ужасно.
Я хочу, чтобы sql возвращал набор результатов с пользовательскими данными, упорядоченными так, чтобы определенный пользователь был первой строкой в наборе результатов, если адрес электронной почты этого пользователя находится в таблице компаний.
У меня есть этот SQL, который возвращает то, что я хочу, но я думаю, что это выглядит ужасно:
select 1 as o, *
from Users u
where companyid = 1
and email = (select email from companies where id=1)
union
select 2 as o, *
from Users u
where companyid = 1
and email <> (select email from companies where id=1)
order by o
И, кстати, адрес электронной почты из таблицы пользователей может быть во многих компаниях, поэтому на адресе электронной почты не может быть соединения: - (
У вас есть идеи, как улучшить это утверждение?
Я использую Microsoft SQL Server 2000.
Edit:
Я использую это:
select *, case when u.email=(select email from companies where Id=1) then 1 else 2 end AS SortMeFirst
from Users u
where u.companyId=1
order by SortMeFirst
Он более элегантный, чем мой. Спасибо Ричард Л!