× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



On 22 Jul 2013 06:31, Milyard, William A. wrote:

I know I've seen this in the archives but I can't find the solution.
I need to update one field where the entire row is a duplicate.
For example:

Pallet Date
915 2013-07-17
915 2013-07-19 <- Need to change to 2013-07-18
915 2013-07-19
918 2013-07-19
920 2013-07-19 <- Need to change to 2013-07-18
920 2013-07-19

UPDATE MYFILE B
SET B.DATE = '2013-07-18'
WHERE B.PALLET IN (
SELECT B.PALLET
From MYFILE B, MYFILE C
Where B.PALLET = C.PALLET
and RRN(B) > RRN(C)
AND B.DATE = '2013-07-19'
AND C.DATE = '2013-07-19')

<<SNIP>>

Seems unclear to me, what this has to do with RPG. Regardless...

At a minimum, the chosen correlation identifiers are somewhat problematic. The WHERE clause apparently wants to correlate to the outer update query, but because the same identifier is reused by the inner query, there is presumably no correlation at all; i.e. all references to the duplicate identifier, are scoped to the subquery. Additionally, if a join were desirable, then using the JOIN syntax makes that clear; although a join should not be necessary, because the correlation would be the effective join. Having corrected just the correlation identifiers might seem able to resolve the issue, however there are still apparent issues. First, the RRN() is not allowed on the outer file's correlation identifier within the inner query [on v5r3]. That could be solved by having the updated file be a VIEW of MYFILE with the RRN() included as a named column for comparison in the subquery. Second, the UPDATE does not explicitly limit the updates to only those rows with the same specific\literal date referenced in the subquery; i.e. both queries need to limit the selection to those rows.

UPDATE MYFILE B
SET B.DATE = '2013-07-18'
WHERE B.DATE = '2013-07-19' /* limit to only the 'wrong' date */
AND B.PALLET IN (
SELECT C.PALLET
From MYFILE C
Where C.PALLET = B.PALLET /* effects the join with next */
AND C.DATE = B.DATE /* avoid specifying literal again */
and RRN(B) < RRN(C) /* update lower of RRN values */
)

Assuming the restriction with RRN(B) remains in the release being used, then precede the above request with the following CREATE, and change the UPDATE to reference QTEMP/MYFILEVW instead of MYFILE, and change the subquery to reference B.RN instead of RRN(B):

create view qtemp/myfileVW as
(select a.*, rrn(a) as rn
from myfile a) /* create update-capable VIEW with RRN() */


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.