[
https://issues.apache.org/jira/browse/DERBY-4355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12752736#action_12752736
]
Knut Anders Hatlen commented on DERBY-4355:
-------------------------------------------
Another problem with the current patch:
In the standard, the syntax for cross (and natural) join is defined with a
<table reference> on the left side of the join operator and a <table factor> on
the right side. This asymmetry is to get the correct join order without
parentheses. The other joins are defined with a <table reference> on both sides
(their join order will be unambiguous thanks to the ON/USING clauses). Since
the current patch wired CROSS into the syntax rule for the other joins, it has
<table reference> on both sides too.
This leads to the following query
select * from t1 cross join t2 right join t3 on x2=x3
being parsed as if it said
select * from t1 cross join (t2 right join t3 on x2=x3)
whereas it should have been parsed as
select * from (t1 cross join t2) right join t3 on x2=x3
This makes the query return wrong results. Given the tables defined below:
create table t1(x1 int);
create table t2(x2 int);
create table t3(x3 int);
insert into t1 values (1);
insert into t2 values (2);
insert into t3 values (3);
We see that the two supposedly equivalent queries return different results with
the patch:
ij> select * from t1 cross join t2 right join t3 on x2=x3;
X1 |X2 |X3
-----------------------------------
1 |NULL |3
1 row selected
ij> select * from (t1 cross join t2) right join t3 on x2=x3;
X1 |X2 |X3
-----------------------------------
NULL |NULL |3
1 row selected
I'll add this as a test case in the final patch.
> Implement CROSS JOIN
> --------------------
>
> Key: DERBY-4355
> URL: https://issues.apache.org/jira/browse/DERBY-4355
> Project: Derby
> Issue Type: Improvement
> Components: SQL
> Environment: any
> Reporter: Bernt M. Johnsen
> Assignee: Knut Anders Hatlen
> Attachments: cross.diff, cross_v2.diff
>
>
> Implement the CROSS JOIN syntax
> SELECT * from t1 CROSS JOIN t2;
> as an alternative syntax to
> SELECT * FROM t1, t2;
> This should be pretty straight forward and ease the migration of SQL code to
> Derby.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.