为什么不起作用?
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)