|
message: 5
date: Fri, 12 Mar 2010 12:54:55 -0600
from: Vern Hamberg<vhamberg@xxxxxxxxxxx>
subject: Re: Why I get diffrent result for SQL
Tomasz
I have found that it is best NOT to put selection criteria in a JOIN
clause - results can be unpredictable, in my experience.
I recommend using a correlated table expression - this is a WITH tename
AS (SELECT ...). then use tename in the final SELECT instead.
You have selection on ILDCTO in the first JOIN - instead, try this (I
put empty lines around the changed line).
WITH F4111TE AS (SELECT * FROM F4111 WHERE ILDCTO = 'II')
SELECT ILITM, ILLITM, ILMCU,
ILLOTN, ILLOCN, ILDOC, ILDCT, ILDGL,
D4DATE, D4DAY, D4WEK, D4MTH, D4YER, ILGLPT, ILDOCO,
ILDCTO, ILTRDJ, D5DATE, D5WEK, D5DAY, D5MTH, D5YER,
ILTRUM, ILAN8,
ILTRQT/getumconv(ILITM, ILTRUM, IMUOM1),
ILPAID/100, IS$FM#
FROM F4111TE LEFT JOIN F57217C
ON ILDOCO = ISBCT
LEFT JOIN F55008 on ILDGL=D4DGJ
LEFT JOIN F55009 on ILTRDJ=D5DGJ
LEFT JOIN F4101 on ILITM=IMITM
WHERE
ILTRQT<>0 AND ILITM<>0 AND ILTRDJ<>0
You might be able to add
ILTRQT<>0 AND ILITM<>0 AND ILTRDJ<>0
to the F4111TE table expression, too. In the statement you have, they
might not be checked until the results of the JOINs has been completed.
If you put them in a table expression, they are more likely to be
evaluated early, and that makes the whole thing run faster. That would
look like this -
WITH F4111TE AS (SELECT * FROM F4111 WHERE ILDCTO = 'II' AND
ILTRQT<>0 AND ILITM<>0 AND ILTRDJ<>0
SELECT ILITM, ILLITM, ILMCU,
ILLOTN, ILLOCN, ILDOC, ILDCT, ILDGL,
D4DATE, D4DAY, D4WEK, D4MTH, D4YER, ILGLPT, ILDOCO,
ILDCTO, ILTRDJ, D5DATE, D5WEK, D5DAY, D5MTH, D5YER,
ILTRUM, ILAN8,
ILTRQT/getumconv(ILITM, ILTRUM, IMUOM1),
ILPAID/100, IS$FM#
FROM F4111TE LEFT JOIN F57217C
ON ILDOCO = ISBCT
LEFT JOIN F55008 on ILDGL=D4DGJ
LEFT JOIN F55009 on ILTRDJ=D5DGJ
LEFT JOIN F4101 on ILITM=IMITM
HTH
Vern
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.