首页 > 解决方案 > where子句中的MySQL未知列(UNION)

问题描述

我有以下查询:

select a.clei, a.partNumber, 
(
  SELECT count(*) FROM 
    ( SELECT * from search_upload_data s where a.clei is not null AND a.clei = s.clei 
      UNION
      SELECT * from search_upload_data s where a.partNumber is not null AND a.partNumber = s.partNumber 
    ) as t1
) as total
from api_analytics_data a

它抛出错误:

Error Code: 1054. Unknown column 'a.clei' in 'where clause'

我猜 MySQL 不允许内部 SQL 中的连接引用,但我不确定如何解决这个问题。

我需要来自 search_upload_data 的计数,请在此处查看 SQL Fiddle:http ://sqlfiddle.com/#!9/172ac/2

<================================================== =========================>

附加说明

我需要弄清楚如何使用 UNION 来做到这一点。每个人的答案中的 OR 条件都在小范围内起作用,但在具有大量数据的实际数据库中陷入困境。

这是解释(对于拉贾特的回答):

在此处输入图像描述

标签: mysqlsqljoincountunion

解决方案


试试这个:简单加入ORGROUP BY

SELECT a.clei, 
    a.partNumber, 
    COUNT(1) tot
FROM api_analytics_data a
LEFT JOIN search_upload_data s ON (a.clei = s.clei OR a.partNumber = s.partNumber)
    AND (a.clei is not null OR a.partNumber is not null)
GROUP BY a.clei, a.partNumber

输出: http ://sqlfiddle.com/#!9/94e556/1


推荐阅读