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

时间:2018-09-27 09:32:52

标签: sql join alias

我真的为此感到挣扎。

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 ...”

但是t2是联接的别名。那么,为什么我会收到此错误?

我试图包括表quote_request,该表是您可以找到最后一个属性的表,但是那时我得到了错误的汇总。如何避免这种情况?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

在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

您还可以将这些联接更改为较新的标准,它更干净,更易于使用。