10. oktober 2004 - 13:12Der er
16 kommentarer og 1 løsning
Kan man ikke lave in NOT IN mængde?
Hej,
Et hurtig sql spørgsmål. Jeg er ved at lave et udtræk hvor jeg har en tabel med kunder og en med ordrer. Jeg kan sagtens lave et udtræk hvor jeg får alle de kunder ud der har en ordre. Altså: SELECT * FROM tblKunde WHERE kundeId IN (SELECT kundeID FROM tblOrdre WHERE status = 1) Hvor status =1 betyder at det er en ordre. Men jeg kan ikke trække noget ud hvis jeg gerne vil have alle de kunder der IKKE har en ordre. Altså noget lignende. SELECT * FROM tblKunde WHERE kundeId NOT IN (SELECT kundeID FROM tblOrdre WHERE status = 1)
Altså hvor jeg søger igennem og hvis kundens id ikke er blandt dem der har tegnet ordre - så skal den med i udtrækket.
Kan det ikke lade sig gøre? Ovenstående (nr 2) returnerer ingen resultater, og jeg ved tilfældigvis at det ikke er alle kunder der har tegnet ordrer.. :-)
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Du skal bruge LEFT OUTER JOIN Noget ala det her: "SELECT p.pollId, p.pollQuestion, SUM(po.pollOptionVotes) AS votes, COUNT(po.pollId) AS options FROM poll as p LEFT OUTER JOIN pollOption AS po ON p.pollId = po.pollId GROUP BY p.pollId" altså må dit blive uden at have testet det: SELECT t1.*, t2.kundeId FROM tblKunde as t1 LEFT OUTER JOIN tblOrdre AS t2 ON t1.kundeId = t2.kundeId
okay, Datalogi :-) lyder cool nok, ville gerne snakke med en som har læst det da jeg ikke helt ved hvad man laver det etc. og om det er noget for mig, men du kan jo smide en mail eller added mig på mikael@syska.dk
Problemet er at der findes ordrer som er af en anden status, f.eks tilbud eller annuleret. I din ville jeg desuden få alle dem som havde odrer.. Ville jeg ikke? Jeg skal finde alle dem som ikke er ordrer?
Men skriv gerne tilbage - jeg tager hjem nu - men svarer igen i morgen tidlig.. :-)
Go' resterende weekend.. :-)
Synes godt om
Slettet bruger
10. oktober 2004 - 14:17#5
Prøv dette. SELECT * FROM tblKunde WHERE not exists (SELECT kundeID FROM tblOrdre WHERE status = 1 and tblkunde.kundeid=tblordre.kundeid)
arne-> Er det til min eller en af de andres? Jeg synes også den burde virke - men får altså ingen resultater ud. Jeg har nu lavet 2 queries. En der trækker den første ud, og en der trækker NOT IN klausulen ud. Og så har jeg et lille c# program der lavet "NOT IN" på den vha alm. løkke cirkus.
Men jeg forstår ikke hvorfor den ikke kan det andet?
Så har jeg nok bare lavet en eller anden fodfejl - nu har jeg også forsimplet den lidt da der er lidt flere krav på den rigtige. Men ideen er den samme, og udtrækkene virker hver for sig. Jeg kan lige prøve at poste den oprindelige: SELECT distinct f.firmaId, f.navn, g.navn FROM crm.dbo.tblFirmaer AS f INNER JOIN crm.dbo.tblfirma_grupper AS fg ON fg.firmaId = f.firmaId INNER JOIN crm.dbo.tblGrupper AS g ON fg.gruppeId = g.gruppeId WHERE fg.gruppeId IN (SELECT gruppeID from crm.dbo.tblgrupper WHERE gruppeid = 96 OR gruppeID = 97) AND fg.firmaId NOT IN (SELECT distinct company_crmref FROM dds.dbo.tblOrders WHERE status = 4 AND created > '10-08-2003' AND deleted IS NULL AND confirmed = 1 ) AND fg.slettet IS NULL AND f.slettet IS NULL ORDER BY g.navn
Kan i se fejlen? Hvis jeg ændrer NOT IN til IN i udtrækket får jeg korrekt alle de kunder der har lagt ordrer.
Buzz-> du kan finde en del information om Datalogi på www.cs.auc.dk der er en del information om uddannelsen. Bland andet semestersider, indhold i studiet osv.. Der er nok også links til folk der render rundt ude på uni..
Jeg har kun taget bachelor som overbygning til datamatiker - så jeg er nok ikke den rette til at forklare hvordan det er fra starten, og hvad de lærer som man ikke lærer som datamatiker... For det var ikke alle der havde lært voldsomt meget mere end os da vi kom ind idet.. :-)
hmmm, hvor lang tid har den så taget, altså når du siger det er en overbygning? en bachelor tager vist nok 3 år, og en kandidat 2 år mere end bachelor mener jeg, men jeg kan selvf tage fejl.
Og for en god ordens skyld: det er ikke fordi vi ikke vil svare på spørgsmålet, men jeg har ikke den fjerneste anelse om hvad problemet er. Den NOT IN burde virke efter min bedste overbevisning.
Men jeg kan altså ikke lige gennemskue hvor jeg har lavet fejlen.. For et eller andet må der jo være galt.. Men som sagt.. Det blev løst ved at lave not in'en i c# istedet.. Så det må gå den her gang.. Så prøver jeg igen næste gang og ser om ikke det kan lykkedes der... :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.