Jag plockar ut några använder från en tabell och dom vill jag sortera efter om deras ID finns lagrat i en annan tabell. De som inte finns i andra tabellen, ska de komma med också? Jag löste det med: Gissningsvis mycket effektivare med (man slipper subselect): Du behöver inte använda <b>CASE WHEN ID IN (SELECT UserID FROM OtherTable) THEN 1 ELSE 0 END</b>. Det är ungefär som att skriva <b>if (villkor) then return true; else false;</b>.Sortera efter om dom finns i en annan tabell
Typ:
<code>
SELECT Name, ID IS IN OtherTable.UserID AS Match FROM Users ORDER BY Match
</code>
Förslag?
/ThomasSv: Sortera efter om dom finns i en annan tabell
Det du är ute efter är antingen;
INNER JOIN - "Joinar" två tabeller om det finns en kolling mellan dem
LEFT JOIN - Hämtar alltid från "huvudtabellen", även om det inte finns en match i den du joinar in, i det fallet kommer det i den "joinade" tabellen komma upp som NULL
Kolla på dessa och återkom om du har frågor.Sv:Sortera efter om dom finns i en annan tabell
<code>
Select Name, CASE WHEN ID IN (SELECT UserID FROM OtherTable) THEN 1 ELSE 0 END AS Match FROM Users ORDER BY Match DESC
</code>
/ThomasSv: Sortera efter om dom finns i en annan tabell
Select Name FROM Users LEFT JOIN OtherTable ON Users.ID = OtherTable.UserID ORDER BY ISNULL(OtherTable.UserID)
/JohanSv: Sortera efter om dom finns i en annan tabell
Kortare:
<code>
Select Name, ID IN (SELECT UserID FROM OtherTable) AS Match FROM Users ORDER BY Match DESC
</code>
Sedan kan <b>ISNULL(uttryck)</b> skrivas <b>uttryck IS NULL</b>. Ingen stor skillnad iofs.