Zitat:
du schummelst
im Original stand ein full-join, und darauf bezog sich meine Anmerkung.
@NormanNG:
Im Beispiel habe ich zwar left join verwendet, weil full join m.E. u.U. auch unerwünschte Daten bringt, aber es ging ja darum, dass nicht alle Teams aufgelistet wurden; bei meiner Abfrage aber kommen alle Teams vor:
SQL-Code:
create table TEST1 (TEAM varchar(10));
create table TEST2 (TEAM varchar(10), DATUM datetime);
insert into TEST1 values ('TeamA');
insert into TEST1 values ('TeamB');
insert into TEST1 values ('TeamC');
insert into TEST2 values ('TeamA', '29.04.2008');
insert into TEST2 values ('TeamB', '30.04.2008');
insert into TEST2 values (null, '29.04.2008');
insert into TEST2 values (null, '30.04.2008');
mit "where" fehlt TeamA komplett:
select a.TEAM, b.DATUM from TEST1 a full join TEST2 b on b.team = a.team
where (b.DATUM = '30.04.2008' or b.DATUM is null) order by 1, 2
<NULL> 30.04.2008
TeamB 30.04.2008
TeamC <NULL>
bei der Bedingung im Join erscheinen alle Teams und ggf. noch ein paar
unnötige Datumswerte mit Team "NULL" (welche bei left join fehlen würden):
select a.TEAM, b.DATUM from TEST1 a full join TEST2 b on b.team = a.team
and (b.DATUM = '30.04.2008') order by 1, 2
<NULL> 29.04.2008
<NULL> 29.04.2008
<NULL> 30.04.2008
TeamA <NULL>
TeamB 30.04.2008
TeamC <NULL>
Aber auf jeden Fall fehlt kein Team - im Gegensatz zu "where ..."!
Daher ist zumindest die Aussage
Zitat:
es macht keinen Unterschied, ob die Bedingungen direkt im Join oder im Where gesetzt sind
widerlegt.
Gruß
Olli