2014-04-16 114 views
0

问题引用列如下: 我使用子查询,我需要加入从-子选择

WITH subselect_from_A AS (
    SELECT A.A_ID FROM A 
) 
SELECT B.D_ID FROM B, subselect_from_A WHERE B.B_ID = 
A.A_ID 
/* or instead: subselect_from_A.A_ID */ 

;

如何引用子查询的列形式?

+0

什么是倒数第二行?如果你删除了'A.A_ID',那么查询就会起作用。 – mjsqu

+0

我相信他只是简化了他的查询,使他的问题更清楚。我希望每个人都会这样做。 – wvdz

+0

是的,我已经说得太简单了:-(太简单了,我错过了整个问题 – Chris

回答

2

首先,您应该停止使用不推荐使用的隐式联接并使用显式联接。那么你可以使用表别名:

WITH subselect_from_A AS (
    SELECT A.A_ID FROM A --doesn't really seem like a sub-select 
) 
SELECT B.D_ID, A.A_ID 
FROM B 
INNER JOIN subselect_from_A AS A 
    ON B.B_ID = A.A_ID; 
+0

我同意显式连接增加可读性,但不是它只是隐含的'OUTER JOIN'已弃用吗? – wvdz

+0

@popovitsj它已被弃用并不代表我它不再工作了,只是有更新,更好的方法来实现它,ANSI 92的SQL连接语法是我回答中发布的语法,它已经超过20年了,隐含的连接已从ANSI标准 – Lamak

+0

中删除被接受为答案 - Lamak和popovitsj都是对的,但我有点像明确的加入 – Chris

1

与常规表格相同的方式。

WITH subselect_from_A AS (
    SELECT A.A_ID FROM A 
) 
SELECT B.D_ID, subselect_from_A.A_ID FROM B, subselect_from_A 
WHERE B.B_ID = subselect_from_A.A_ID;