我正在尝试使用 case when 条件进行查询以查看我将显示的列表,但我遇到此错误 ORA-01427: single-row subquery returns more than one row
.
查询是这样的:
SELECT
CASE WHEN action_type like 'Trigger Severity' THEN (select cast(SEVERITY as varchar2(255)) name from SURV_TRIGGER_SEVERITY_LIST)
WHEN action_type like 'Host Group' then (select cast(name as varchar2(255)) name from Surv_List.groups)
WHEN action_type like 'Host' then (select cast(name as varchar2(255)) name from tn_tree)
END display_value
FROM surv_action_type_list
WHERE id = 0
是否可以在 case 条件中调用多行查询?
最佳答案
我会分多个步骤执行此操作。获取操作类型,然后发出适当的查询。您是在前端还是在存储过程中使用此逻辑由您决定,并且可能取决于很多其他因素。
如果你绝对需要这样做,那么你可以尝试这样的事情:
SELECT
SQ.display_value
FROM
surv_action_type_list SATL
INNER JOIN
(
SELECT
'Trigger Severity' action_type,
CAST(severity AS VARCHAR2(255)) display_value
FROM
SURV_TRIGGER_SEVERITY_LIST
UNION ALL
SELECT
'Host Group' action_type,
CAST(name AS VARCHAR2(255) display_value
FROM
Surv_List.groups
UNION ALL
SELECT
'Host' action_type,
CAST(name AS VARCHAR2(255) display_value
FROM
tn_tree
) SQ ON
SQ.action_type = SATL.action_type
WHERE
SATL.id = 0
关于返回多行时带有 case 的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125668/