簡體   English   中英

在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

當我這樣做時,它說表“結果”不存在。 我如何離開加入結果別名?

根據您的評論,您正在嘗試將子查詢結果與其自身結合起來。

在這種特殊情況下,它沒有任何意義,因為您只會獲得兩次相同的數據。 因此,使用子查詢一次將起作用

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(公用表表達式):

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 語句中重復子查詢兩次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM