Oracle:如何别名子查询,并将其与in一起在WHERE中使用



为什么不起作用?

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

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

这应该很好:

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)

最新更新