在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 语句中重复子查询两次
我想执行以下操作,但它不起作用。我想左联接一个子查询的结果。
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 语句中重复子查询两次