【发布时间】:2011-06-11 20:54:13
【问题描述】:
我正在尝试使用在 IN 子句中返回逗号分隔字符串的子查询。
以下方式:
SELECT p.person_id, g.name || '>>' || p.firstname || ' ' || p.lastname as GROUP_PATH
FROM PERSON p
LEFT JOIN GROUP g ON (
g.group_id = p.group_id
)
WHERE p.person_id IN (
SELECT person_ids FROM other WHERE other_id = :OTHER_ID
)
ORDER BY lower(GROUP_PATH)
我收到以下错误:
ORA-01722: 无效号码。
有没有更好的方法来做到这一点甚至可能?
【问题讨论】:
-
你能显示所有三个表的表定义(特别是 id 列类型)吗?以及如何定义
:other_id?您可能将数字列连接到您认为只有数字或仅匹配数字的 varchar,并且它会绊倒您不希望相关的非数字值。 -
我刚刚注意到我的初始查询是错误的。我更新了。
-
person_ids在other中是逗号分隔的列表吗?如果是这样,那在IN子句中将不起作用。您需要将字符串解析为一个集合并在查询中使用该集合。但是你不应该首先在关系数据库中存储一个逗号分隔的键列表,所以你可能想要修复你的数据模型。
标签: oracle subquery in-clause ora-01722