MySQL where 子句中的未知列(UNION)

标签 mysql sql join count 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 条件在小范围内有效,但在具有大量数据的实际数据库中陷入困境。

以下是解释(Rajat 的回答):

enter image description here

最佳答案

尝试一下:使用 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

关于MySQL where 子句中的未知列(UNION),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50383957/

相关文章:

java - 不能在 CrudRepository 上使用 delete()

mysql:如何创建 View 显示表多模式

sql - 使用 2 个键加速连接

MySQL:根据用户连接四个表

MySQL:在单个或连接查询中不使用索引

mysql - INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别?

mysql - MYSQL中如何使用MS Access 2010附加文件

Mysql从不同的表中选择ID

php - 表关系问题 - 从第二个表收集信息

php - Mysqli IN 获取重复结果