Oracle:如何别名子查询并在WHERE IN中使用它?

时间:2013-12-06 22:35:47

标签: sql oracle

为什么这不起作用?

WITH ids AS (SELECT unique id FROM table1 WHERE cd = :cd AND
                                                yr = :yr)
SELECT NVL(person_id, NULL) FROM table2 WHERE id IN ids

在我的实际代码中,语句ID被使用了两次。我发了这篇文章,找出如何别名子查询,然后在WHERE和IN中使用它,如上所示。

我收到错误:Warning: oci_execute(): ORA-00904: "IDS": invalid identifier

1 个答案:

答案 0 :(得分:2)

cte就像一个子查询,但它并不完全相同,正如你的案例所示。 IN接受值列表或子查询。

这应该可以正常工作:

SELECT NVL(person_id, NULL) 
FROM table2 
WHERE id IN (SELECT unique id 
             FROM table1 WHERE cd = :cd AND yr = :yr)

更新:您不需要(不能)别名与IN运算符一起使用的子查询,如果您想使用cte,则需要一个引用它的子查询:

;WITH ids as (SELECT unique id 
              FROM table1 
              WHERE cd = :cd AND  yr = :yr)
SELECT NVL(person_id, NULL) 
FROM table2 WHERE id IN (SELECT * FROM ids)