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]
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.