无法在子查询中使用LISTAGG输出。 ORACLE

时间:2018-02-04 13:31:51

标签: sql oracle string-aggregation

我从以下查询中获取逗号分隔值     SELECT LISTAGG('''' || student_name || '''',',') WITHIN GROUP (ORDER BY student_name) FROM students;

但是,当我输入子查询时,它不会给出任何结果 select * from students where student_name in ('A', 'B'); - 给两行

select * from students where student_name in (SELECT LISTAGG('''' || student_name || '''',',') WITHIN GROUP (ORDER BY student_name) FROM students;) - 没有行

1 个答案:

答案 0 :(得分:2)

您不了解in的工作原理。它不适用于字符串。它适用于多个项目。

因此,编写逻辑的正确方法是:

select  *
from students
where student_name in (select student_name from students) -- no rows;

您的查询基本上是这样做的:

where student_name in ('aaron,beth,calvin,debbie,...')

in列表有一个项目,因此相当于:

where student_name = 'aaron,beth,calvin,debbie,...'

没有学生姓名(如果你有多行)可以是所有学生的连接名称。