On 2/7/12 8:09 AM, TXVanguard wrote:
Rick,

I've discovered a few more wrinkles in some of the UPDATE/INNER JOIN states
I have to port. Here's an example:

UPDATE T1 INNER JOIN (T2a INNER JOIN T2b ON T2a.B = T2b.B) ON T1.B = T2b.B
SET T2a.D = true WHERE (T2b.E=true AND NOT (T1.F=2 AND (T2b.G=2 OR
T2b.G=1)));
Hi John,

Hm, again I'm not an expert on Access syntax. I think that following the pattern of the previous ported statements may help:

1) Find the table which is being updated (in this case it is T2).

2) Write an UPDATE statement against that table. The SET clause should set the column(s) of the updated table to the result of subquery(ies).

a) The joins go into the subquery(ies). In this case, you have a join of T2 x T2 x T1.

b) The WHERE clause which follows the original SET clause should be converted into a WHERE clause on the new UPDATE statement but using an EXISTS subquery against whatever join is being performed in the original WHERE clause.

But this is tricky since I don't know what the Access query is trying to do. I would also recommend the following lines of attack:

A) Verify that your Derby UPDATE produces the same results as your Access UPDATE on the same data set.

B) See if you can find any comments around the original Access queries explaining at a high level what they are trying to accomplish.

Sorry that I can't give you any more definitive advice. Maybe some better advice will come from someone who understands the Access SQL dialect.

Hope this helps,
-Rick

Note that the "table" on the right of the first INNER JOIN is not a table,
rather the result of another INNER JOIN.  Is there any way to rewrite this
in standard SQL?

Reply via email to