为什么我不能再使用派生表(子查询结果)的名称?

时间:2017-07-18 10:28:55

标签: mysql sql

我需要重用子查询产生的表,但是当我尝试执行像这样的SQL时

SELECT id 
FROM company
LEFT JOIN 
    (
    SELECT * FROM sales
    -- join
    -- join
    -- join
    -- join
    ) foo
ON foo.company_id = company.id

LEFT JOIN
    (
    SELECT company_id,balance FROM foo -- generates error
    UNION ALL
    SELECT company_id,balance FROM manual_moves
    ) moves
ON moves.company_id = company.id;
-- note: the actual sub-query has been omitted to make it focused on the error 

不幸的是我收到了错误

  

表'databaseName.foo'不存在

构建foo表的子查询有很多连接,我不想再重写相同的子查询(我想这会对绩效产生影响)

有没有办法可以重复使用该子查询结果表的名称-foo-?

1 个答案:

答案 0 :(得分:1)

首先将“foo”查询的内容转储到临时表中,然后在主查询中查询该临时表。