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