我在使用多个循环OR时遇到此错误:单行子查询返回多行,
该错误仅通过Postman发生(可能与Hibernate有关),查询在Oracle SQL Developer中工作
我的要求:
WITH SPRM_TABLE AS (
SELECT
DISTINCT P.SPRM_KEY,
P.SPRM_PARENT_KEY AS PARENTS,
P.CPRM_KEY,
P.SPRM_PARENT_KEY
FROM
S4C_SUB_PERIMETER P
INNER JOIN S4C_CRITERIA CRI ON CRI.SPRM_KEY = P.SPRM_KEY
WHERE
(
(
CRI.CRI_TYPE = 'OFFER'
AND CRI.CRI_VALUE = 'BUSINESS_ETHERNET'
)
)
or (
(
P.SPRM_PARENT_KEY IS NULL
OR (
CRI.CRI_TYPE IN (
'SATIN_ACCOUNT', 'SATIN_SUBACCOUNT',
'IDENT_RCE', 'ICO1'
)
AND (
SELECT
CHP.CRI_KEY_PARENT
FROM
S4C_CRITERIA_HERITANCE CHP
WHERE
CHP.CRI_KEY_CHILD = CRI.CRI_KEY
) IN (
SELECT
CBB.CRI_KEY
FROM
S4C_CRITERIA CBB
WHERE
CBB.SPRM_KEY = P.SPRM_PARENT_KEY
)
)
)
AND (
(
CRI.CRI_TYPE = 'IDENT'
AND CRI.CRI_VALUE = '00010525'
)
)
)
)
SELECT
DISTINCT CPRM.CPRM_KEY AS PRM_ID,
'CLIENT' AS PRM_TYPE
FROM
CPRM_TABLE CPRM
UNION ALL
SELECT
DISTINCT PRM.SPRM_KEY AS PRM_ID,
'SUB' AS PRM_TYPE
FROM
SPRM_TABLE PRM START WITH PRM.SPRM_PARENT_KEY IS NULL
AND PRM.CPRM_KEY IN (
SELECT
CLI_PRM.CPRM_KEY
FROM
CPRM_TABLE CLI_PRM
) CONNECT BY PRIOR PRM.SPRM_KEY = PRM.SPRM_PARENT_KEY
如果有人可以帮助,请?如果有人可以解释为什么这在Oracle SQL开发人员中有效,而不是在Java代码中使用Hibernate?
1条答案
按热度按时间rxztt3cl1#
你不能这样做:
IN运算符的左侧需要一个标量,而您提供的子查询显然返回多行。
您需要将这两个查询合并为一个: