SQL:
WITH joined AS (
SELECT *
FROM table_a a
JOIN table_b b ON (a.a_id = b.a_id)
)
SELECT a_id
FROM joined
返回无效的标识符。
使用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
但是我需要这个别名来覆盖所有字段。
我设法满足这个条件的唯一方法是使用:
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
但这不是完美的解决方案......
答案 0 :(得分:4)
您可以在加入表时使用USING
子句的效果。
当您连接连接列具有相同名称的表时(就像您的示例一样),USING
子句将仅返回连接列一次,因此以下工作:
with joined as (
select *
from table_a a
join table_b b using (a_id)
)
select a_id
from joined;
SQLFiddle示例:http://sqlfiddle.com/#!4/e7e099/2
答案 1 :(得分:2)
我认为没有别名就可以做到这一点。 “已加入”查询的结果有两个字段,都名为a_id。除非您在最终查询中使用别名(或两者),否则外部查询不知道您指的是哪个a_id。
为什么您的最终查询不是“完美”解决方案?
答案 2 :(得分:0)
您可以使用以下别名:
WITH JOINED AS (
SELECT A.A_ID A_A_ID, B.A_ID B_A_ID,
A.FIELD_NAME1 A_FIELDNAME1, A.FIELDNAME2 A_FIELDNAME2,A.FIELDNAME_N A_FIELDNAME_N,
B.FIELD_NAME1 B_FIELDNAME1, B.FIELDNAME2 B_FIELDNAME2,B.FIELDNAME_N B_FIELDNAME_N,
FROM TABLE_A A
JOIN TABLE_B B ON (A.A_ID = B.A_ID)
)
SELECT A_A_ID, B_A_ID
FROM JOINED
使用SELECT *