×
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.
James Perkins wrote:
I am getting this error (SQL0338) on 6.1. I found
documentation about this error, but I don't really
understand why so I'm hoping an SQL guru can help me.
http://publib.boulder.ibm.com/infocenter/systems/topic/rzaq9/rzaq9.pdf
Here is the SQL statement. It works fine on 5.4, but
not on 6.1. If i keep move the "USERS" table to be
after the JOIN clause all works okay.
WITH temp(company_id, item_number) AS (
SELECT cmp, item
FROM mylib.itembal
GROUP BY cmp, item
)
SELECT vendor, vendor_name, COUNT(a.item_number)
FROM mylib.vendor_items AS a,mylib.users AS b
JOIN temp AS t ON a.item_number = t.item_number AND
a.company_id = t.company_id
WHERE userid = ? AND a.web_site_id = b.web_site_id AND
a.company_id = 1
GROUP BY vendor, vendor_name
ORDER BY vendor_name
I'm sure this is how it's supposed to work, but I don't
really understand why. Is this standard SQL behavior?
The above rewritten more generically as:
SELECT ...
FROM V_I AS a
, USERS AS b JOIN TEMP AS t ON a.i = t.i
The above rewritten to match precedence for JOIN [over comma
separated] with the parentheses explicitly specified [should seem
odd; i.e. JOIN B to T using a column from A]:
Select ...
FROM V_I AS a
,( USERS AS b JOIN TEMP AS t ON a.i = t.i )
The revised and noted as functional request, for having moved
USERS to the end in the joins, makes the query request JOIN A to T
while using columns between those same two files:
Select ...
From ( V_I AS a
JOIN TEMP AS t ON a.i = t.i )
,USERS b
The above rewritten SELECT matches [nearly exactly; ignores the
CTE and all clauses beyond the JOIN\ON] with the change barred
scenario in the MTU. The original syntax and effect, prior to the
error [error since 6.1] being issued, is an ambiguously requested
[and implicitly performed on prior releases as a, for lack of JOIN
and ON being specified between A and B] combination of CROSS JOIN
and an INNER JOIN. Notice that the JOIN defines the relationship
between B and T, yet the ON defines the relationship between A and
B. Moving the B correlation to be the third file, the cross product
is then no longer ambiguous for the implied order; i.e. the result
is A INNER JOIN T CROSS JOIN B. AFaIK the combination of the CROSS
and INNER should not matter for the result set, so apparently the
stricter syntax requirements remain in effect irrespective the final
result.? Prevent the error either by explicitly requesting the
cross product join, or by rewriting the join criteria [JOIN & ON] to
explicitly define how the joining should be accomplished without
performing any cross product.
FWiW, the snippet from the .pdf of the MTU follows:
SQL0338 can also be issued when a table is specified followed
by a comma and a joined table.
Select a.c1
From BASE1 a
, BASE2 b INNER JOIN BASE3 c on a.c1 = c.c1
is equivalent to
Select a.c1
From BASE1 a
, (BASE2 b INNER JOIN BASE3 c on a.c1 = c.c1)
To specify a.c1 in the ON clause for the joined table, include
the first table within the joined table.
Select a.c1
From BASE1 a
CROSS JOIN BASE2 b
INNER JOIN BASE3 c
on a.c1 = c.c1
Regards, Chuck
As an Amazon Associate we earn from qualifying purchases.