在IN子句中使用子查询

时间:2020-02-20 16:37:06

标签: sql oracle

我在这里遇到了一个特定的问题,我从一个像',90132988,90133148,72964884,'这样的列中获取ID。假设这个值存储在Table1的ColumnA列中。

我想在另一个使用IN子句的查询中使用它。

SELECT * 
FROM USER_GROUP 
WHERE ID IN (SELECT CONCAT(CONCAT('(',REPLACE(LTRIM(RTRIM(REPLACE(COLUMNA, ',', ' '))), ' ', ',')),')') FROM Table1)

运行此查询时,出现无效数字错误。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您收到数字错误,因为id是数字。因此,Oracle明智地假设子查询返回数字。

我认为您想要的逻辑是:

SELECT ug.*
FROM USER_GROUP ug
WHERE EXISTS (SELECT 1
              FROM Table1 t1
              WHERE t1.COLUMNA LIKE '%,' || ug.ID || ',%'
             );

我强烈建议您不要将数字列表存储为字符串。每个数字只存储一行。确实要简单得多,并且生成的代码将更加有效。

答案 1 :(得分:0)

您可以尝试使用../转换“ ID”,但是如果有索引,则将失去对ID的任何使用。

_frontend
相关问题