簡體   English   中英

INNER JOIN的別名引用了字段列表SQL中的一列

[英]Alias of INNER JOIN referred to a column in the field list SQL

我真的為此感到掙扎。

SELECT t1.servizio, 
       Count(DISTINCT p.pro_id), 
       Count(DISTINCT CASE 
                        WHEN Concat(p.pro_id, p.gender) LIKE '%M' THEN p.pro_id 
                      END) AS 'M', 
       Count(DISTINCT CASE 
                        WHEN Concat(p.pro_id, p.gender) LIKE '%F' THEN p.pro_id 
                      END) AS 'F', 
       Count(DISTINCT CASE 
                        WHEN Concat(p.pro_id, p.in_provincia) LIKE '%Si' THEN 
                        p.pro_id 
                      END) AS 'prov_si', 
       Count(DISTINCT CASE 
                        WHEN Concat(p.pro_id, p.in_provincia) LIKE '%No' THEN 
                        p.pro_id 
                      END) AS 'prov_no', 
       Count(DISTINCT t1.pronto_request_id), 
       Count(t2.quote_id) 
FROM   pro p, 
       pro_request pr, 
       request_servizio t1 
       JOIN (SELECT request_servizio.servizio, 
                    Count(quote_request.quote_id) 
             FROM   request_servizio, 
                    quote_request 
             WHERE  request_servizio.pronto_request_id = 
                    quote_request.pronto_request_id 
             GROUP  BY request_servizio.servizio) AS t2 
         ON t1.servizio = t2.servizio 
WHERE  p.pro_id = pr.pro_id 
       AND pr.pronto_request_id = t1.pronto_request_id 
GROUP  BY t1.servizio

基本上,我涉及4個表: request_serviziopropro_requestquote_request

問題出在最后選擇的列上:

錯誤是“未知列t2.quote_id ...”

但是t2t2的別名。 那么,為什么我會收到此錯誤?

我試圖包括表quote_request ,該表是您可以找到最后一個屬性的表,但是那時我得到了錯誤的匯總。 如何避免這種情況?

先感謝您!

在JOIN中,您使用的子查詢沒有提供quote_id列,這意味着您不能從別名t2引用它,因為在選擇部分的內部子查詢中未提供該別名。 您只能使用內部查詢提供的內容。

我想說將查詢更改為此,因為您似乎已經有了要使用的計數。

SELECT t1.servizio, 
   Count(DISTINCT p.pro_id), 
   Count(DISTINCT CASE 
                    WHEN Concat(p.pro_id, p.gender) LIKE '%M' THEN p.pro_id 
                  END) AS 'M', 
   Count(DISTINCT CASE 
                    WHEN Concat(p.pro_id, p.gender) LIKE '%F' THEN p.pro_id 
                  END) AS 'F', 
   Count(DISTINCT CASE 
                    WHEN Concat(p.pro_id, p.in_provincia) LIKE '%Si' THEN 
                    p.pro_id 
                  END) AS 'prov_si', 
   Count(DISTINCT CASE 
                    WHEN Concat(p.pro_id, p.in_provincia) LIKE '%No' THEN 
                    p.pro_id 
                  END) AS 'prov_no', 
   Count(DISTINCT t1.pronto_request_id), 
   Count(t2.CountOfQuoteId) --edit here
FROM   pro p, 
   pro_request pr, 
   request_servizio t1 
   JOIN (SELECT request_servizio.servizio, 
                Count(quote_request.quote_id) AS CountOfQuoteId --edit here
         FROM   request_servizio, 
                quote_request 
         WHERE  request_servizio.pronto_request_id = 
                quote_request.pronto_request_id 
         GROUP  BY request_servizio.servizio) AS t2 
     ON t1.servizio = t2.servizio 
WHERE  p.pro_id = pr.pro_id 
   AND pr.pronto_request_id = t1.pronto_request_id 
GROUP  BY t1.servizio

您也可以將這些連接更改為較新的標准,它更干凈,更易於使用。

暫無
暫無

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

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