Oracle SQL WITH 子句选择连接列

B.G*_*ill 0 sql oracle join with-clause

查询语句:

WITH joined AS (
    SELECT * 
    FROM table_a a 
    JOIN table_b b ON (a.a_id = b.a_id)
)
SELECT a_id 
FROM joined 
Run Code Online (Sandbox Code Playgroud)

返回无效标识符。

使用 WITH 子句时如何选择连接列?我尝试过别名、前缀,但没有任何效果。我知道我可以使用:

WITH joined AS (
    SELECT a.a_id 
    FROM table_a a 
    JOIN table_b b ON (a.a_id = b.a_id)
)
SELECT a_id 
FROM joined
Run Code Online (Sandbox Code Playgroud)

但我需要这个别名来覆盖所有领域。

我设法满足此条件的唯一方法是使用:

WITH joined AS (
    SELECT a.a_id a_id_alias, a.*, b.* 
    FROM table_a a 
    JOIN table_b b ON (a.a_id = b.a_id) 
)
SELECT a_id_alias 
FROM joined 
Run Code Online (Sandbox Code Playgroud)

但这不是完美的解决方案......

a_h*_*ame 5

USING连接表时可以使用子句的效果。

当您连接连接列具有相同名称的表时(就像您的示例一样),该USING子句将只返回连接列一次,因此以下工作:

with joined as (
  select *
  from table_a a 
    join table_b b using (a_id)
)
select a_id
from joined;
Run Code Online (Sandbox Code Playgroud)

SQLFiddle 示例:http ://sqlfiddle.com/#!4/e7e099/2