db-torque-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Fischer <fisc...@seitenbau.net>
Subject Re: submitted patch which allows left joins, right joins and explicit inner joins
Date Wed, 18 May 2005 10:52:46 GMT




Hi Janneke,

Hope you do not mind if I answer in english because this might also be
interesting for torque users list who do not speak german.

To resummarize the problem, in some cases (see attached mail) the left join
seems to behave like a "normal" inner join.

A colleague of mine just found out that in some databases (e.g. Oracle),
if you use a left join and use the table you left joined on in the where
clause, the left join gets "converted" to an inner join. You would have to
include all parts of the where clause to the join clause to get what you
are looking for.

so what you would want is
SELECT ... FROM AUFLAGEN LEFT JOIN BILDER ON
AUFLAGEN.AUF_ID=3DBILDER.BI_REF_ID AND BILDER.BI_RS_ID<>3 AND
BILDER.BI_REFTABNAME=3D'AUFLAGEN';

and not (this is what you get at the moment)
SELECT ... FROM AUFLAGEN LEFT JOIN BILDER ON
AUFLAGEN.AUF_ID=3DBILDER.BI_REF_ID WHERE BILDER.BI_RS_ID<>3 AND
BILDER.BI_REFTABNAME=3D'AUFLAGEN';

I am afraid this is not supported by Torque at the moment :-(
(see also
http://issues.apache.org/scarab/issues/id/TRQS258 in the issue
tracker)

     Thomas



"Janneke Cloppen" <dblim@gmx.de> schrieb am 18.05.2005 10:52:51:

> Hallo Thomas
>
> Die normalen Joins funktionieren einwandfrei, hab bis jetzt nur left =
und
> right getestet. Mir ist aufgefallen, dass er dies nicht als left-join=

> verwendet sondern das normale Join. Hier ein Beispiel wo ich es verwe=
nde
> (wurde ein bi=DFkel gek=FCrzt)
>
>       Criteria lcriteria=3Dnew Criteria();
>
>
> lcriteria.addJoin(AuflagenPeer.AUF_ID,BilderPeer.BI_REF_ID,Criteria.
> LEFT_JOIN);
>          lcriteria.addJoin(AuflagenPeer.AUF_VT_ID,VerteilerPeer.VT_ID=
);
>          lcriteria.addJoin(VerteilerPeer.VT_ADR_ID,AdressenPeer.ADR_I=
D);
>          lcriteria.add(BilderPeer.BI_REFTABNAME,AuflagenPeer.TABLE_NA=
ME);
>
>
> lcriteria.add(BilderPeer.BI_RS_ID,Settings.RECORDSTATUS_DELETE,
> Criteria.NOT_EQUAL);
>          lcriteria.addSelectColumn(AuflagenPeer.AUF_LASTFAHRT);
>          lcriteria.addSelectColumn(AdressenPeer.ADR_FIRMA);
>          lcriteria.addSelectColumn(AuflagenPeer.AUF_TEXT);
>          lcriteria.addSelectColumn(BilderPeer.BI_ID);
>          lcriteria.addSelectColumn(BilderPeer.BI_DATEINAME);
>
> lRw =3D AuflagenPeer.doSelectVillageRecords(lcriteria);
>
> In diesem Fall werden nur Auflagen angezeigt, die auch Bilder haben, =
aber
> dies m=FC=DFte eigentlich auch Auflagen anzeigen, die keine bilder be=
sitzen.
> Hier die Ausgabe vom Criteria als String.
>
> Criteria:: AUFLAGEN.AUF_STR_ID<=3D>AUFLAGEN.AUF_STR_ID IS NULL :
> BILDER.BI_RS_ID<=3D>BILDER.BI_RS_ID<>3:
> BILDER.BI_REFTABNAME<=3D>BILDER.BI_REFTABNAME=3D'AUFLAGEN':
> AUFLAGEN.AUF_RS_ID<=3D>AUFLAGEN.AUF_RS_ID<>3:
> AUFLAGEN.AUF_ANT_ID<=3D>AUFLAGEN.AUF_ANT_ID=3D142:
>
>
> Current Query SQL (may not be complete or applicable): SELECT
> AUFLAGEN.AUF_LASTFAHRT, ADRESSEN.ADR_FIRMA, AUFLAGEN.AUF_TEXT,
BILDER.BI_ID,
> BILDER.BI_DATEINAME, AUFLAGEN.AUF_GPSPOS, AUFLAGEN.AUF_POSITION FROM
> AUFLAGEN LEFT JOIN BILDER ON AUFLAGEN.AUF_ID=3DBILDER.BI_REF_ID, VERT=
EILER,
> ADRESSEN WHERE AUFLAGEN.AUF_VT_ID=3DVERTEILER.VT_ID AND
> VERTEILER.VT_ADR_ID=3DADRESSEN.ADR_ID AND AUFLAGEN.AUF_STR_ID IS NULL=
  AND
> BILDER.BI_RS_ID<>3 AND BILDER.BI_REFTABNAME=3D'AUFLAGEN' AND
> AUFLAGEN.AUF_RS_ID<>3 AND AUFLAGEN.AUF_ANT_ID=3D142 ORDER BY
> AUFLAGEN.AUF_LASTFAHRT DESC, VERTEILER.VT_POSITION ASC
>


---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
For additional commands, e-mail: torque-user-help@db.apache.org


Mime
View raw message