On 07 Oct 2013 11:44, Hoteltravelfundotcom wrote:
yes we did just upgrade to 7.1
I will try the inner join.
  Of course, be aware that any unmatched rows, would not be included in 
the result-set of the INNER JOIN.  As I understand the issue... a 
/consistent/ result with the effects seen using LEFT OUTER JOIN, would 
be an empty result-set when using the INNER JOIN; and an implication 
that the issue is somewhat more likely to be a usage problem, than a 
defect.  And if the INNER JOIN does not yield an empty-set, such that 
the matching rows would since correctly be including the previously 
"missing" /zone/ data [that was previously being generated as the NULL 
value], then any legitimately unmatched rows will be excluded from the 
result-set rather than having the generated-as matching row with NULL 
values for the columns; and an implication that the issue is more likely 
a defect with the use of the LEFT or SUBSTR scalar in the join predicate 
of an OUTER JOIN.
  Again, the effect of using the scalar subselect vs the OUTER JOIN 
[beyond just seeing the effect of using the INNER JOIN vs the OUTER 
JOIN] is probably worthwhile to investigate.  If that circumvents the 
issue, its effects apparently would be more appropriate\desirable than 
using the INNER JOIN, because unmatched rows would have the NULL value 
generated for the MHZONE, instead of the unmatched row being omitted 
entirely from the result-set:
 SELECT
   T01.OHORDD, T01.OHORDT
 , T01.OHJOB3, T01.OHORD#
 , T01.OHOSTC
 , ( select M.MHZONE
     from SHP4VAR27F.MFH1MH M
     where left(M.MHORDR, 8) = T01.OHORD#
      /* substr(M.MHORDR, 1, 8) = T01.OHORD# -- try this also */
   ) as MHZONE
 FROM ASTDTA.OEORHDOH T01
 WHERET01.OHORD#='02576661'
at the moment I created a temp file with the data needed
via a simple RPG MOVEL  so I could push the report to the user.
  IMO, suggesting that the issue was dealt with momentarily by creating 
"a temp file with the data needed via a simple RPG MOVEL" is akin to 
"speaking in riddles".  A much more explicitly and conspicuously obvious 
explanation IMNSHO would have been to suggest that the problem was 
/circumvented/ by creating a temporary copy of the file and data, 
whereby the column attributes of the two columns of the equal-predicate 
were made identical; that the implementation for copying data was CPYF 
vs an RPG program using MOVEL is inconsequential, and the relevant 
detail is that the compared columns are since made compatible.
  To make the effect extremely explicit, a scripted example is IMO 
significantly clearer than just /words/ attempting to describe what was 
done; e.g.:
    Given [effectively]:
      create table OEORHDOH (OHORD# char(08)) ;
      create table MFH1MH   (MHORDR char(10), MHZONE char(2)) ;
      insert into  OEORHDOH values('02576661') ;
      insert into  MFH1MH   values('0257666101', 'NW') ;
    The problem being encountered; unexpected NULL values in JOIN:
      SELECT T01.OHORD#, M.MHZONE
      FROM            OEORHDOH T01
      LEFT OUTER JOIN MFH1MH   M
         ON T01.OHORD# = left(M.MHORDR, 8)
         /* T01.OHORD# = substr(M.MHORDR, 1, 8) -- same problem */
      WHERE T01.OHORD#='02576661'
      ; -- yields the following report:
      OHORD#    MHZONE
      02576661    -
      ********  End of data  ********
    Having made the following [effective] changes:
      alter table MFH1MH alter column MHORDR set data type char(8) ;
    The problem was circumvented [but intuitively, there should be no 
requirement to effect matching column attributes]:
      SELECT T01.OHORD#, M.MHZONE
      FROM            OEORHDOH T01
      LEFT OUTER JOIN MFH1MH   M
         ON T01.OHORD# = M.MHORDR /* no SUBSTR nor LEFT scalar */
      WHERE T01.OHORD#='02576661'
      ; -- yields the following report:
      OHORD#    MHZONE
      02576661    NW
      ********  End of data  ********
  Irrespective of the means to circumvent the difficulty [an apparent 
defect], such actions are not a resolution; merely a /circumvention/ of 
the problem.  The following predicates should be equivalent in effect, 
to the effect from having copied\moved the data for field MHORDR into a 
CHAR(8) column of an alternate copy of the file.
   T01.OHORD# = left(M.MHORDR, 8)
   T01.OHORD# = substr(M.MHORDR, 1, 8)
  With very few if any possible nuances [e.g. per some details not yet 
revealed in the message thread], there is effectively _no reason_ other 
than a defect in\with the DB2 for i SQL, for which the NULL values 
should be generated in the described scenario [at least for the order 
number '02576661']; i.e. the implication was made clearly enough, that 
there *is a matching row* for that order-number.  Thus it would behoove 
the sufferer of such an issue, to report that failure as a defect, to 
their service provider, to get a correction; a preventive fix.  If the 
latest cumulative and DB-fixpack are not already [properly] installed, 
then that will be the first thing almost any support organization will 
want to have happen before they review the incident.... unless a 
scripted re-create is provide to them, that reproduces the same problem 
on their up-to-date system.
As an Amazon Associate we earn from qualifying purchases.