|
Archives of the TeradataForumMessage Posted: Tue, 07 Sep 2004 @ 18:14:14 GMT
Hi all, I have found a sql problem which I can't explain myself. I try to explain what I want to do: I have two tables: bla1 (fact table) and bla2 (lookup table). I want to join every row from bla1 with one row from bla2. The problem is, that I don't have allways a row (in bla2) for every row in bla1. There are some (defined) rules to solve the problem: In bla2 for every combination (bdf,sai,ek_akt) there will be a genre 0. So if in bla1 genre is NULL then use 0. If genre is something else, but not in bla2.genre available then use 0 as genre. I hope you understand what I mean. So, I made a sample as shown below: create table bla1 ( bdf int ,sai int ,ek_akt int ,genre int) ; create table bla2 ( bdf int ,sai int ,ek_akt int ,genre int) ; insert into bla1 (1,109,3,); insert into bla1 (1,109,3,0); insert into bla1 (1,109,3,4); insert into bla1 (1,109,3,6); insert into bla2 (1,109,3,0); insert into bla2 (1,109,3,4); sel * from bla1; sel * from bla2; --The final select: sel * from bla1 a left join bla2 b on (a.bdf=b.bdf and a.sai=b.sai and a.ek_akt=b.ek_akt and a.genre=b.genre ) or (a.bdf=b.bdf and a.sai=b.sai and a.ek_akt=b.ek_akt and 0=b.genre) ; My base tables: bla1: bdf sai ek_akt genre 1 109 3 NULL 1 109 3 0 1 109 3 4 1 109 3 6 bla2: bdf sai ek_akt genre 1 109 3 0 1 109 3 4 normal left join: bdf sai ek_akt genre bdf sai ek_akt genre 1 109 3 NULL NULL NULL NULL NULL 1 109 3 0 1 109 3 0 1 109 3 4 1 109 3 4 1 109 3 6 NULL NULL NULL NULL all is fine and as expected. Now with my rules: bdf sai ek_akt genre bdf sai ek_akt genre 1 109 3 NULL 1 109 3 0 1 109 3 0 1 109 3 0 1 109 3 4 1 109 3 0 1 109 3 4 1 109 3 4 1 109 3 6 1 109 3 0 Now I have the genre 4 two times. But why? Isn't the rule with an "OR" that if one part of the the OR-condition is true all is true and one row is selected? I expected the following: bdf sai ek_akt genre bdf sai ek_akt genre 1 109 3 NULL 1 109 3 0 1 109 3 0 1 109 3 0 1 109 3 4 1 109 3 4 1 109 3 6 1 109 3 0 Perhaps I'm too tired today to find my logical bug? :-) Hope someone can help me :-) Thanks in advance, Dirk
| ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||