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)
但这不是完美的解决方案......
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
| 归档时间: |
|
| 查看次数: |
4927 次 |
| 最近记录: |