J'ai une instruction SQL agaçante qui semble simple mais elle semble horrible. Je veux que le sql renvoie un resultset avec userdata ordonné de sorte qu'un certain utilisateur soit la première ligne dans le resultset si cette adresse email d'utilisateurs est dans la table companies.SQL UNION et ORDER BY
Je cette SQL qui renvoie ce que je veux, mais je pense qu'il est affreux:
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
Et en passant, la emailaddress de la table utilisateur peut être dans de nombreuses entreprises donc il ne peux pas être une jointure sur le emailaddress :-(
avez-vous des idées sur la façon d'améliorer cette déclaration
Im en utilisant Microsoft SQL Server 2000.
Edit:? Im en utilisant celui-ci:
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
Sa façon plus élégante que la mienne. Merci Richard L!
Quelle SGBDR utilisez-vous (Oracle, SQL Server ..) – FerranB