Subquery 子查询返回多个错误时的大小写表达式错误

Subquery 子查询返回多个错误时的大小写表达式错误,subquery,case,Subquery,Case,Hi有一个子查询,在CASE表达式中,它返回多行,并给出错误说明子查询返回多行,但我的子查询将始终返回多行,并且需要获取查询返回的所有行 你能帮我调整查询吗 SELECT TS.ts_test_id "TEST ID", TS.ts_name "TEST NAME", TS.ts_responsible "Designer", DS.ds_step_order "Step Order", DS.ds_step_name "Step Name", TS.TS

Hi有一个
子查询
,在CASE表达式中,它返回多行,并给出错误说明
子查询返回多行
,但我的
子查询
将始终返回多行,并且需要获取查询返回的所有行

你能帮我调整查询吗

SELECT TS.ts_test_id "TEST ID",
    TS.ts_name "TEST NAME",
    TS.ts_responsible "Designer",
    DS.ds_step_order "Step Order",
    DS.ds_step_name "Step Name",
    TS.TS_USER_02 "Application", 
    CASE
        WHEN DS.ds_link_test is NULL THEN DS.ds_description
        ELSE
            CASE
                WHEN DS_LN.ds_link_test is NULL THEN DS_LN.ds_description
                ELSE
                  **(SELECT ds_description from DESSTEPS where ds_test_id = DS_LN.ds_link_test)**
            END
    END "Step Description",
    CASE
        WHEN DS.ds_link_test is NULL THEN DS.ds_expected
        ELSE
            CASE
                WHEN DS_LN.ds_link_test is NULL THEN DS_LN.ds_expected
                ELSE
                  **(SELECT ds_expected from DESSTEPS where ds_test_id =DS_LN.ds_link_test)**
            END
    END "Expected Result"
FROM dessteps DS
    LEFT JOIN dessteps DS_LN ON DS_LN.ds_test_id = DS.ds_link_test
    JOIN test TS ON DS.ds_test_id = TS.ts_test_id
        AND TS.TS_USER_02 = 'ABINRIM' --CHANGE THE APP NAME
ORDER BY DS.ds_step_order

好的-我不明白你做得好到什么可以给你100%的答案,但是select中的子查询不起作用;select语句只接受单个值,不接受行。我想您在case语句中的表别名也弄糊涂了——我已经尝试过在下面修复它们

[一点语义:我将调用一个自连接,也就是说,当您将表连接到自身时是一个“递归步骤”)

您是否有数量可变的递归步骤,或者您是否知道有多少次您必须使用DESTEPS进行自连接?无论哪种方式,您都可以通过递归查询找到一个优雅的解决方案-我不熟悉Oracle,因此我无法帮到您,但例如

或者,如果您知道递归步骤的数量,您可以多次自联接

SELECT TS.ts_test_id "TEST ID",
TS.ts_name "TEST NAME",
TS.ts_responsible "Designer",
DS.ds_step_order "Step Order",
DS.ds_step_name "Step Name",
TS.TS_USER_02 "Application", 
CASE
    WHEN DS_LN.ds_link_test is NULL THEN DS.ds_description
    ELSE
        CASE
            WHEN ds2.ds_link_test is NULL THEN DS_LN.ds_description
            ELSE
              ds2.ds_description
        END
END "Step Description",
CASE
    WHEN DS_LN.ds_link_test is NULL THEN DS.ds_expected
    ELSE
        CASE
            WHEN ds2.ds_link_test is NULL THEN DS_LN.ds_expected
            ELSE
              ds2.ds_expected
        END
END "Expected Result"
FROM dessteps DS
    LEFT JOIN dessteps DS_LN ON DS_LN.ds_test_id = DS.ds_link_test
    JOIN test TS ON DS.ds_test_id = TS.ts_test_id
    LEFT JOIN dessteps ds2 ON ds2.ds_test_id = DS_LN.ds_link_test

    AND TS.TS_USER_02 = 'ABINRIM' --CHANGE THE APP NAME
ORDER BY DS.ds_step_order

您可以发布一些示例数据和您尝试创建的输出吗?另外,您使用的是什么数据库/SQL版本?我实际上正在质量中心数据库上执行此查询,该数据库主要是oracle。带星号的Select查询返回两行或多行。功能是有两个表Test和DESSTPES。对于each TEST table DESTEPS表中可能有多行,并且可能有一个指向TEST table的链接。当一个测试有一个设计步骤,而该设计步骤又调用另一个设计步骤,并且该设计步骤可能会调用另一个步骤时,该链接就是这样的。该查询实际上不起作用,因为它在不替换递归步骤的情况下获取了所有记录。这就是问题所在-您没有说您想要什么样的输出,最好是几个示例行。上面的查询生成一个输出-每个步骤一行。您希望每个步骤只有一行吗?然后您需要编写一个查询来聚合您的步骤并加入到该查询中。。。