在mysql左加入子查询的结果

Left join the result of subquery in mysql

我想执行以下操作,但它不起作用。我想左联接一个子查询的结果。

select result1.id, result.name from (select cust.id as id, cust.name as name, ss.sold_date as soldDate, pp.product_name as productName from customers cust
left join sales ss on ss.customer_id = cust.id
left join products pp on pp.id = ss.product_id) as result
left join result as result1 on result.id = result1.id

当我这样做时,它说 table 'result' 不存在。我如何离开加入结果别名?

根据您的评论,您正在尝试将子查询结果与自身连接起来。

在这种特殊情况下,它没有任何意义,因为您只会获得相同的数据两次。所以,使用一次子查询就可以了

select result1.id, result.name 
  from (select cust.id as id, cust.name as name, ss.sold_date as soldDate, pp.product_name as productName 
          from customers cust
          left join sales ss on ss.customer_id = cust.id
          left join products pp on pp.id = ss.product_id) as result
  left join result as result1 on result.id = result1.id

一般来说,如果你需要使用相同的子查询两次,你可以使用 CTE (common-table-expression):

with sub_q as (select cust.id as id, cust.name as name, ss.sold_date as soldDate, pp.product_name as productName 
          from customers cust
          left join sales ss on ss.customer_id = cust.id
          left join products pp on pp.id = ss.product_id)

select *
  from sub_q res
  left join sub_q res1
    on res.id = res1.id

CTE(上面查询的“with”部分)就像一个变量。在“通常”的编程语言中,变量用于存储值,而在查询语言中,变量用于存储查询

更新。 OP 似乎是 8.0 之前的 mysql 版本,并且 db OP 不支持 CTE

所以,在这里您最终可能会使用视图

首先,创建视图的脚本

create view sub_q as select cust.id as id, cust.name as name, ss.sold_date as soldDate, pp.product_name as productName 
          from customers cust
          left join sales ss on ss.customer_id = cust.id
          left join products pp on pp.id = ss.product_id;

二、运行查询

select *
  from sub_q res
  left join sub_q res1
    on res.id = res1.id;

或者您可以在 select 语句中重复子查询两次