Ik heb bij M$ SQL Server 2000 SP2 een probleem met een join...
Ik heb de volgende entiteiten in mijn datamodel (hoog naar laag)
t_onderlinge l -> t_relatie r -> t_polis p -> t_object o -> t_schade s
Voorheen liepen de relaties van l naar s, maar pas geleden is de relatie tussen o en s weggehaald... met als gevolg dat ik de stored proc's (sp) weer aan kon passen...
Nu heb ik echter een probleem met 1 sp...
Omdat ik gegevens uit zowel o als s nodig heb, heb ik een RIGHT JOIN gemaakt tussen deze tabellen, zodat waar mogelijk de gegevens uit o bij de gegevens uit s toegevoegd kunnen worden... en dan in de relaties naar boven werken om uiteindelijk ook nog wat van r toe te voegen.
Dit is de sp:
Als ik deze probeer te runnen krijg een een foutmelding:
Ik heb daarna het hele ding nog in een smerige view gegooid zodat de joins naar FROM-clause verplaats werden, omdat een andere DBA van mening was dat M$ SQL Server niet goed met Joins in de WHERE-clause om kan gaan....
Ik krijg dan idd geen foutmelding... maar ook geen records... en ze zijn er, dat weet ik zeker, want als ik de joins van hoog naar laag leg komen er gewoon records uit!
ps. Ik weet natuurlijk wel dat ik dit met een tijdelijke tabel of iets dergelijks op kan lossen, maar daar gaat het nu even niet om... ik wil het in 1 query oplossen... als een van jullie zeker weet dat het simpelweg niet kan, dan wil dat natuurlijk ook graag weten, maar dan wel met reden natuurlijk!
Ik heb de volgende entiteiten in mijn datamodel (hoog naar laag)
t_onderlinge l -> t_relatie r -> t_polis p -> t_object o -> t_schade s
Voorheen liepen de relaties van l naar s, maar pas geleden is de relatie tussen o en s weggehaald... met als gevolg dat ik de stored proc's (sp) weer aan kon passen...
Nu heb ik echter een probleem met 1 sp...
Omdat ik gegevens uit zowel o als s nodig heb, heb ik een RIGHT JOIN gemaakt tussen deze tabellen, zodat waar mogelijk de gegevens uit o bij de gegevens uit s toegevoegd kunnen worden... en dan in de relaties naar boven werken om uiteindelijk ook nog wat van r toe te voegen.
Dit is de sp:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| CREATE PROCEDURE Sori_RapSchade
@coll_nr INT,
@vlmcht_nr char(4) ,
@jaarmaand Decimal(6,0),
@bukode char(2),
@bu_srt_code char(3),
@blnSto Bit
AS
SELECT distinct
s.coll_nr AS Collectiviteitsnummer
,s.vlmcht_nr AS Volmachtsnummer
,s.bu_kode AS [BU-Kode]
,s.rubr_srt_kode AS [Rubriek-kode]
,s.scha_nr AS Schadenummer
,s.pol_nr AS Polisnummer
,IsNull(r.naam ,'<<geen relatie>>') AS Relatienaam
,IsNull(r.postkode ,'0000XX' ) AS [Relatie postcode]
,IsNull(r.huis_nr ,0 ) AS [Relatie huisnummer]
,IsNull(o.verz_waarde,0 ) AS [Verzekerde som]
,IsNull(o.obj_nr ,0 ) AS [Obj Vlgnr]
,s.datum AS [Schade datum]
,{ fn YEAR(s.datum) } AS [Schade jaar]
,dg.gbeur_oms AS Gebeurtenis
,dg.oorz_oms AS Oorzaak
,s.belang AS Belang
,s.betaald AS Betaald
,s.belang - s.betaald AS Voorziening
,s.betaald_fac AS [Betaald herverz faculatief]
,s.belang_fac - s.betaald_fac AS [Voorziening herverz facultatief]
FROM
t_schade s
,t_object o
,t_polis p
,t_relatie r
,tr_dim_gos dg
WHERE s.coll_nr = @coll_nr
AND s.vlmcht_nr = @vlmcht_nr
AND s.jaar_maand = @jaarmaand
AND s.bu_kode = @bukode
AND s.rubr_srt_kode = @bu_srt_code
AND dg.dim_gos_key = s.dim_gos_key
AND dg.gbeur_id < > 'STO'
AND s.pol_nr *= o.pol_nr
AND s.obj_nr *= o.obj_nr
AND s.jaar_maand *= o.jaar_maand
AND p.pol_nr = o.pol_nr
AND p.jaar_maand = o.jaar_maand
AND r.rel_nr = p.rel_nr
AND r.jaar_maand = p.jaar_maand
GO |
Als ik deze probeer te runnen krijg een een foutmelding:
Nou... daar ben ik het dus niet mee eens!Server: Msg 303, Level 16, State 1, Procedure Sori_RapSchade, Line 10
The table 't_object' is an inner member of an outer-join clause. This is not allowed if the table also participates in a regular join clause.
Ik heb daarna het hele ding nog in een smerige view gegooid zodat de joins naar FROM-clause verplaats werden, omdat een andere DBA van mening was dat M$ SQL Server niet goed met Joins in de WHERE-clause om kan gaan....
Ik krijg dan idd geen foutmelding... maar ook geen records... en ze zijn er, dat weet ik zeker, want als ik de joins van hoog naar laag leg komen er gewoon records uit!
ps. Ik weet natuurlijk wel dat ik dit met een tijdelijke tabel of iets dergelijks op kan lossen, maar daar gaat het nu even niet om... ik wil het in 1 query oplossen... als een van jullie zeker weet dat het simpelweg niet kan, dan wil dat natuurlijk ook graag weten, maar dan wel met reden natuurlijk!