两表别名一致能做关联查询吗
按照正常的理解,一般是不能的,就像PostgreSQL
postgres=# create table t10(id1 int, name1 varchar(32));
CREATE TABLE
postgres=# create table t11(id2 int, name2 varchar(32));
CREATE TABLE
postgres=# insert into t10 values(1,'test1');
INSERT 0 1
postgres=# insert into t10 values(2,'test2');
INSERT 0 1
postgres=# insert into t11 values(1,'test3');
INSERT 0 1
postgres=# select bc.name2 from t10 bc left join t11 bc on bc.id1 = bc.id2;
ERROR: table name "bc" specified more than once
postgres=#
但是Oracle不一样,它还真能执行,执行结果如下
SQL> create table t10(id1 int, name1 varchar2(32));
Table created.
SQL> create table t11(id2 int, name2 varchar2(32));
Table created.
SQL> insert into t10 values(1,'test1');
1 row created.
SQL> insert into t10 values(2,'test2');
1 row created.
SQL> insert into t11 values(1,'test3');
1 row created.
SQL> EXPLAIN PLAN FOR select bc.name2 from t10 bc left join t11 bc on bc.id1 = bc.id2;
Explained.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1151093956
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 88 | 6 (0)| 00:00:01 |
|* 1 | HASH JOIN OUTER | | 2 | 88 | 6 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| T10 | 2 | 26 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| T11 | 1 | 31 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("BC"."ID1"="BC"."ID2"(+))
Note
-----
- dynamic statistics used: dynamic sampling (level=2)
19 rows selected.
SQL> select bc.name2 from t10 bc left join t11 bc on bc.id1 = bc.id2;
NAME2
--------------------------------------------------------------------------------
test3
SQL>
想不通oracle为什么要支持这种写法,此处用作记录~
❤️ 转载文章请注明出处,谢谢!❤️