Frage

Ich habe eine lästige SQL-Anweisung, die einfach erscheinen, aber es sieht schrecklich. Ich mag, dass die SQL ein Resultset mit Benutzerdaten bestellt zurückzukehren, so dass ein bestimmte Benutzer die erste Zeile in der Ergebnismenge, wenn die Benutzer E-Mailadresse in der Firmen-Tabelle ist.

Ich habe diese SQL das zurückgibt, was ich will, aber ich denke, es sieht schrecklich:

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

Und übrigens, kann die E-Mailadresse aus der Benutzertabelle in vielen Unternehmen sein, so gibt es eine Join auf der E-Mailadresse sein kann nicht: - (

Haben Sie irgendwelche Ideen, wie diese Aussage zu verbessern?

Im mit Microsoft SQL Server 2000.

Edit: Im mit diesem:

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

Die Art und Weise eleganter als meine. Dank Richard L!

War es hilfreich?

Lösung

Sie könnten etwas tun ..

        select CASE 
                WHEN exists (select email from companies c where c.Id = u.ID and c.Email = u.Email) THEN 1 
                ELSE 2 END as SortMeFirst,   * 
    From Users u 
    where companyId = 1 
    order by SortMeFirst

Andere Tipps

wird diese Arbeit:?

select c.email, * 
from Users u
     LEFT JOIN companies c on u.email = c.email
where companyid = 1
order by c.email desc
-- order by case when c.email is null then 0 else 1 end

Ich bin nicht sicher, das ist besser, aber es ist ein alternativer Ansatz

select *, (select count(*) from companies where email = u.email) as o 
from users u 
order by o desc

Edit: wenn es viele E-Mails über verschiedene Unternehmen sein kann, die passen, und Sie sind in der gegebenen Gesellschaft nur interessiert, dies wird

select *, 
 (select count(*) from companies c where c.email = u.email and c.id = 1) as o 
from users u 
where companyid = 1
order by o desc
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top