23. april 2007 - 23:25Der er
7 kommentarer og 1 løsning
Brug for et udtryk Brugt Ja/nej hvis user in subquery
Jeg ska l have slettet en lang række dubiøse brugere, men skal være sikker på at de ikke aktuelt er i brug.
denne SQl giver et brugbar resultat men er for langsom:
SELECT DISTINCT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, dbo.Booking.BookingUserID AS brugt FROM dbo.[User] LEFT OUTER JOIN dbo.Booking ON dbo.[User].UserID = dbo.Booking.BookingUserID
her vises 'brugt' som userid hvis user har en booking ellers false, men et kvickt ja/nej eller 0/1 vha en case vil være perfekt, men
denne her dur ikke, da der returneres flere værdier
SELECT DISTINCT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, CASE (SELECT 1 FROM Booking AS B WHERE B.BookinguserID = userID) WHEN 1 THEN 1 ELSE 0 END AS brugt FROM dbo.[User]
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Denne her ser dog ud til at virke - dog langsomt for 4000 kunder
SELECT DISTINCT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, CASE (SELECT 1 WHERE userID IN (SELECT BookinguserID AS userID FROM Booking)) WHEN 1 THEN 1 ELSE 0 END AS brugt FROM dbo.[User]
"dubiøse" brugere. Er det dansk ord. Vil gerne vide det :).
Ved ikke om det er hurtigere det her...måske bare en anden måde at gøre det på:
SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, Eksisterer FROM dbo.[User] LEFT OUTER JOIN (SELECT 1 as Eksisterer, BookinguserID FROM Booking) as bookings ON bookings.BookinguserID = dbo.[User].UserID
------------
Her er en anden måde vha. UNION. -- HER HENTES ALLE UD DER HAR RELATION SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, 1 as Exists WHERE UserID IN (SELECT BookinguserID FROM Booking) UNION SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, 0 as Exists WHERE NOT UserID IN (SELECT BookinguserID FROM Booking)
SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, 1 as Exists FROM dbo.[User] WHERE UserID IN (SELECT BookinguserID FROM Booking) UNION SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, 0 as Exists FROM dbo.[User] WHERE NOT UserID IN (SELECT BookinguserID FROM Booking)
SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, 1 as [exists] FROM dbo.[User] WHERE UserID IN (SELECT BookinguserID FROM Booking) UNION SELECT dbo.[User].UserName, dbo.[User].UserID, dbo.[User].UserPhone, dbo.[User].UserPassword, dbo.[User].lastactive, 0 as [exists] FROM dbo.[User] WHERE NOT UserID IN (SELECT BookinguserID FROM Booking)
Du har ret - det var vel også mig, som fokuserede på EXISTS IN som en mulighed. Det virker og vist nok en lille smule hurtigere end CASE delen, som må ud i en DISTINCT. Kast et svar. Tsk for hjælpen
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.