0

我有一个元素表和一个指定这些元素之间层次结构的表。知道一个元素的别名后,我想获取其子元素的别名。指定“元素 ID”参数的列在两个表中具有不同的名称。

元素表有这个(相关的)列:

TYPE_EQUIP_CODE(设备类型)

ELEMENT_CODE(元素的标识符)

ELEMENT_ALIAS(元素的别名)

层次结构表有这个(相关的)列:

FATHER_ELEMENT_ID(父元素的标识符)

FATHER_ELEMENT_TYPE(父亲元素的装备类型)

CHILD_ELEMENT_ID(子元素的标识符)

ELEMENT_CODE 和 CHILD_ELEMENT_ID 是我要比较的列

我想要的是:

知道父亲别名及其类型,获取其孩子的别名。

这是我尝试嵌套子查询的方法:

SELECT ELEMENT_ALIAS
    FROM TUN_ELEMENT
        WHERE ELEMENT_CODE IN (
            SELECT * 
                FROM J_ELEMENT_HIERARCHY 
                    WHERE FATHER_ELEMENT_ID = (
                        SELECT ELEMENT_CODE 
                            FROM TUN_ELEMENT
                                WHERE ELEMENT_ALIAS = 'C-09-27-SAE-CR-002' AND TYPE_EQUIP_CODE = 4
                    ) 
                    AND FATHER_ELEMENT_TYPE = 4)

子查询单独工作,但运行它我得到这个错误:

Solo se puede especificar una expresión en la lista de selección cuando la subconsulta no se especifica con EXISTS.. Error 116. SQLSTATE 42000. Severity 16. MsgState 1. Line 11。

翻译的意思:

不使用 EXISTS 指定子查询时,选择列表中只能指定一个表达式

我想要得到的是这个,子元素的别名:

ELEMENT_ALIAS

C-09-27-SAE-CR-002-D-11

C-09-27-SAE-CR-002-D-12

C-09-27-SAE-CR-002-D-13

这可以通过子查询完成还是只能通过 JOIN 完成?

4

1 回答 1

1

您必须仅指定要在子查询中返回的 1 列。
你可以在这里找到更多。
是要与之比较ELEMENT_ALIAS还是FATHER_ELEMENT_ID要与之比较ELEMENT_CODE

SELECT ELEMENT_ALIAS
    FROM TUN_ELEMENT
        WHERE ELEMENT_CODE IN (
            SELECT <Column name here> 
                FROM J_ELEMENT_HIERARCHY 
                    WHERE FATHER_ELEMENT_ID = (
                        SELECT ELEMENT_CODE 
                            FROM TUN_ELEMENT
                                WHERE ELEMENT_ALIAS = 'C-09-27-SAE-CR-002' AND TYPE_EQUIP_CODE = 4
                    ) 
                    AND FATHER_ELEMENT_TYPE = 4)
于 2019-08-13T08:20:23.673 回答