在子查询中使用 IN 子句。比较的列名不同

Using IN clause with subqueries. The compared column names are different

我有一个 table 元素和一个 table 指定这些元素之间的层次结构。 知道一个元素的别名我想得到它的 child 元素的别名。 指定 "Element ID" 参数的列在两个 table 中具有不同的名称。

元素 table 具有以下(相关)列:

TYPE_EQUIP_CODE(设备类型)

ELEMENT_CODE(元素的标识符)

ELEMENT_ALIAS(元素的别名)

层次结构 table 具有以下(相关)列:

FATHER_ELEMENT_ID(父元素的标识符)

FATHER_ELEMENT_TYPE(父元素的装备类型)

CHILD_ELEMENT_ID(child元素的标识符)

ELEMENT_CODE 和 CHILD_ELEMENT_ID 是我要比较的列

我想要的是:

知道父亲的别名及其类型,得到其children的别名。

这是我试过的嵌套子查询:

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.

翻译的意思:

Only one expression can be specified in the selection list when the subquery is not specified with EXISTS

我想要得到的是 child 元素的别名:

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 来完成?

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

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)