30. maj 2001 - 11:25Der er
28 kommentarer og 1 løsning
WHERE
SELECT DISTINCT [forretningsforbindelser].[forsikringsrådgiverid], [forretningsforbindelser].[kundeid], [forretningsforbindelser].[kundenavn] FROM ((forretningsforbindelser INNER JOIN [ff-rel] ON [forretningsforbindelser].[kundeid]=[ff-rel].[kundeid]) INNER JOIN forsikringsaftaler ON [ff-rel].[policeid]=[forsikringsaftaler].[policeid]) INNER JOIN roller ON [ff-rel].[rolleid]=[roller].[rolleid] WHERE [forretningsforbindelser].[forsikringsrådgiverid]=[indtast forsikringsrådgiverid] And [forsikringsaftaler].[policetype] IN (152,153) And [roller].[rolleid]=301;
dette virker næsten... der skal være 4 kriterier iorden forsikrådgid policetype=152 policetype=153 rolleid=301
problemet er at policetype 152 og 153 enkeltvis accepteres, og ikke som jeg vil at de begge skal være opfyldt for at en linie vises.
det er som om sætningen [forsikringsaftaler].[policetype] IN (152,153)finder ELLER istedet for OG
har prøvet denne løsning: prøv at erstatte [forsikringsaftaler].[policetype] IN (152,153)med[forsikringsaftaler].[policetype] = 152 AND[forsikringsaftaler].[policetype] = 153
hej45, as torbenkoch states, this is an MS SQL group. Even so, what is it you expect to get in the result? must a kundeID have both a forsikringsaftale 152 AND also a 153?
Det virker som om, at du på den måde kan have et kundenavn til at optræde flere gange i din forretningsforbindelser tabel?? Det er jo noget skidt, sådan som udgangspunkt, redundante data.
well if this is the case then ...[forsikringsaftaler].[policetype] = 152 AND [forsikringsaftaler].[policetype] =153...
isnt going to work, and neither is OR.
If a kunde does have both 152 and 153 then you will get two records wif you use OR and none if you use AND. because a single record cant be both 152 AND 153...
but actually i dont mind getting two records, but i dont want records that have either 152 and 153. with or i get that. with and iget none. what #\"%\"% must i then do...
Kan du ikke lige prøve at beskrive relationerne mellem dine tabeller, og samtidigt lige skrive din sql pænt formatteret uden [] - den er godt nok svær at gennemskue, som den står der...
FROM ((forretningsforbindelser INNER JOIN [ff-rel] ON forretningsforbindelser.kundeid=[ff-rel].kundeid)
INNER JOIN forsikringsaftaler ON [ff-rel].policeid=forsikringsaftaler.policeid) INNER JOIN roller ON [ff-rel].rolleid=roller.rolleid
WHERE forretningsforbindelser].forsikringsrådgiverid=indtast forsikringsrådgiverid AND forsikringsaftaler.policetype=152 AND forsikringsaftaler.[policetype=153 AND roller.rolleid=301;
Hvis du vil vælge de kunder, der BÅDE har policetype 152 OG policetype 153, skal du (i pseudo-SQL) sige
SELECT * FROM kunder WHERE EXISTS (SELECT * FROM forsikringer WHERE policetype = 152 AND kundeid = kunder.kundeid) AND EXISTS (SELECT * FROM forsikringer WHERE policetype = 153 AND kundeid = kunder.kundeid)
Hvordan denne pseudo-SQL skal skrives i dit konkrete tilfælde, kan jeg ikke hjælpe dig med, uden at vide mere om hvordan dine tabeller hænger sammen; det fremgår ikke af dit eksempel.
Denne forespørgsel burde udvælge alle kunder fra tabellen ForretningsForbindelser, der både har en policetype 152 og 153:
SELECT * FROM FORRETNINGSFORBINDELSER AS ff WHERE EXISTS (SELECT * FROM FFR-Relation AS r INNER JOIN ForsikringsAftaler AS f ON r.PoliceID = f.PoliceID WHERE f.PoliceType = 152 AND r.KundeID = ff.KundeID) AND EXISTS (SELECT * FROM FFR-Relation AS r INNER JOIN ForsikringsAftaler AS f ON r.PoliceID = f.PoliceID WHERE f.PoliceType = 153 AND r.KundeID = ff.KundeID)
Jamen alt dette fremgår det tydeligt i min Bog: \"Fald i søvn til databaser\". For supplerende oplysninger, læs min ligeså tykke bog om rettelser til min første bog, eller mine overskuelige overhead skitser.
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.