Avatar billede mickni33 Nybegynder
07. januar 2011 - 12:04 Der er 15 kommentarer og
2 løsninger

Select kunder som kun har et bestemt produkt

Hvis jeg har en kunde tabel og en produkt tabel hvor man har produkterne "TV,Internet,telefon"

Hvis jeg nu kun vil have de kunder ud som kun har telefon og intet andet, hvordan skal min join så se ud.

jeg vil helst udgå where <> TV and <> internet da der i virkeligheden er over 100 produkter :-)
Avatar billede Syska Mester
07. januar 2011 - 12:31 #1
Hvordan ser din table struktur ud ?
Avatar billede mickni33 Nybegynder
07. januar 2011 - 12:38 #2
Kunde
kundeID, navn, adresse

Produkt
produktID, navn, dato


kunde_produkt tabel
ID,kundeid,produktid,oprettelsedato
Avatar billede teepee Nybegynder
07. januar 2011 - 12:49 #3
select kundeID from kunde k1 where exists (select 1 from kunde_produkttabel k2 where k2.kundeid = k1.kundeid and k2.produktid in (select produktid from produkt where navn = 'Telefon')
and not exists (select 1 from kunde_produkttabel k3 where k3.kundeid = k1.kundeid and k3.produktid in (select produktid from produkt where navn <> 'Telefon')
Avatar billede mickni33 Nybegynder
07. januar 2011 - 12:52 #4
men hvis jeg har 100 produkter og der måske kommer flere til så blir det en lang sql..
Troede der måske var et keyword som  f.eks ONLY 'Telefon' agtig.
:-)
Avatar billede michael_stim Ekspert
07. januar 2011 - 12:53 #5
SELECT a.* FROM Kunde a, kunde_produkt b WHERE b.kundeid NOT IN (SELECT produktid FROM kunde_produkt WHERE produktid <> ditProd_ID AND kundeid = ditKunde_ID) AND b.produktid = telefon_ID;

Måske. Ikke testet.
Avatar billede mickni33 Nybegynder
07. januar 2011 - 12:56 #6
hmm måske skulle man lave en ONLY funktion :-)
Avatar billede teepee Nybegynder
07. januar 2011 - 13:02 #7
Det forstår jeg ikke. SQL'en giver dig alle dem med Telefon og ikke andet. Vi du have noget andet? F.eks. vil du have kunder med kun ét produkt?
Avatar billede mickni33 Nybegynder
07. januar 2011 - 13:06 #8
ja jeg vil have kunderne som kun har et eneste produkt
Avatar billede michael_stim Ekspert
07. januar 2011 - 13:06 #9
Og i min kan jeg se at du sevlf. skal søge på kundeid og ikke produktid i subselecten ;o)
Avatar billede Syska Mester
07. januar 2011 - 13:15 #10
Finde alle kunde som kun har et produkt.

SELECT * FROM kunde k
INNER JOIN
( SELECT kundeid FROM kunde_produkt GROUP BY kundeid HAVING COUNT(produktid) = 1 ) t1 ON t1.kundeid = k.kundeid

mvh
Avatar billede mickni33 Nybegynder
07. januar 2011 - 13:20 #11
hmmm forstår den ikk :-) men prøver den lige :-)

michael_stim >> yees den tror jeg godt jeg kan bruge, den er også dynamisk hvis der kommer flere produkter
Avatar billede Syska Mester
07. januar 2011 - 13:28 #12
Kort sagt ... så tager min din many-to-many table ... som er relation mellem dine produkter og kunder ... og finder alle de kunder som kun har 1 produkt ...

derefter bliver der joinet over på dine kunde table.
Avatar billede mickni33 Nybegynder
07. januar 2011 - 14:43 #13
michael_stim >> næææ det kunne jeg sku ikke så opfører den sig bare som om jeg siger where produkt = 'telefon'. troede ellers jeg udelukkede alt andet i den der IN

buzzz>> min SQL fejler ved din inner select
Avatar billede Syska Mester
07. januar 2011 - 14:48 #14
Hvad fejl kommer den med ?

Hvad version af mssql ?
Avatar billede mickni33 Nybegynder
07. januar 2011 - 14:51 #15
nejnej det var bare mig der var et fjols :-)

er i gang med at flette din sql ind. Vender tilbage senere
Avatar billede mickni33 Nybegynder
07. januar 2011 - 15:04 #16
aarrgg pis.. virkede ikke tror det er mere komplekst end som sådan da det skal flettes ind i noget eksisterende sql..

så jeg prøver lige videre med noget andet, men prøver at tage udgangspunkt i det som i har skrevet.

læg et svar
Avatar billede Syska Mester
07. januar 2011 - 15:06 #17
svar.

Men hvad skal det flettes sammen med ?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester