2016-02-01 64 views
0

我尝试使用从连接表“glpi_items_tickets”字段成这样子查询:MySQL的多级子查询

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子句”

将整个request:

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’到我的子查询?

+0

尝试没有联合子查询的括号。他们至少不必要。 – Sebas

回答

1
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 
0

使用全表名称而不是别名。

git.items_id更换为glpi_items_tickets.items_id

在编译子查询期间,别名不存在,因为外部查询(您设置别名的地方)不能编译,直到内部查询被认为是有效的。