我从以下查询中获取逗号分隔值
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;)
- 没有行
答案 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,...'
没有学生姓名(如果你有多行)可以是所有学生的连接名称。