MySQL 多级子查询

MySQL multiple level subquery

我尝试将加入 table "glpi_items_tickets" 的字段用于这样的子查询中:

    SELECT
        NAME
    FROM
        (
            SELECT
                NAME
            FROM glpi_computers
            WHERE id = git.items_id
        ) AS t1
    UNION
        (
            SELECT
                NAME
            FROM glpi_monitors
            WHERE   id = git.items_id
        )
    UNION
        (
            SELECT
                NAME
            FROM glpi_networkequipments
            WHERE   id = git.items_id
        )
    UNION
        (
            SELECT
                NAME
            FROM glpi_printers
            WHERE id = git.items_id
        )
) AS aliasIT

但我有一个错误类型:“#1054 - 未知列 'git.items_id' 在 where 子句中”

整个请求:

SELECT
    gt.id,
    (
        SELECT
            NAME
        FROM
            (
                SELECT
                    NAME
                FROM glpi_computers
                WHERE   id = git.items_id
            ) AS t1
        UNION
            (
                SELECT
                    NAME
                FROM glpi_monitors
                WHERE   id = git.items_id
            )
        UNION
            (
                SELECT
                    NAME
                FROM glpi_networkequipments
                WHERE id = git.items_id
            )
        UNION
            (
                SELECT
                    NAME
                FROM glpi_printers
                WHERE id = git.items_id
            )
    ) AS aliasIT
FROM glpi_tickets gt
INNER JOIN glpi_items_tickets git 
ON gt.id = git.tickets_id;

你有解决方案将字段 "glpi_items_tickets.items_id" 用于我的子查询吗?

使用完整的 table 名称而不是别名。

将每个 git.items_id 替换为 glpi_items_tickets.items_id

编译子查询期间别名不存在,因为在内部查询被认为有效之前无法编译外部查询(您设置别名的地方)。

SELECT ...
FROM
    glpi_tickets gt
    INNER JOIN glpi_items_tickets git 
        ON git.tickets_id = gt.id;
    INNER JOIN
    (
        SELECT NAME, id FROM glpi_computers
        UNION
        SELECT NAME, id FROM glpi_monitors
        UNION
        SELECT NAME, id FROM glpi_networkequipments
        UNION
        SELECT NAME, id FROM glpi_printers
    ) g
        ON g.id = git.items_id