mysql - 是什么导致错误“列与第 1 行的值计数不匹配”?
问题描述
SQL 代码:
CREATE TABLE EMPLOYEE_ORDERS (
TOTAL_HANDLED INT,
CONSTRAINT PK_TOTAL PRIMARY KEY (TOTAL_HANDLED)
);
INSERT INTO EMPLOYEE_ORDERS (
SELECT COUNT(ORDERS.EMPLOYEE_ID), EMPLOYEE.EMPLOYEE_ID
FROM ORDERS LEFT JOIN EMPLOYEE
ON ORDERS.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
GROUP BY EMPLOYEE.EMPLOYEE_ID
ORDER BY COUNT(ORDERS.EMPLOYEE_ID));
我尝试过: INSERT INTO EMPLOYEE_ORDERS (TOTAL_HANDLED) (SELECT....
我正在尝试返回处理超过 0 个订单的所有员工的 ID,任何建议将不胜感激
解决方案
您的子查询返回两个值,但表中只有一列。您需要重写子查询以删除该COUNT
值并在HAVING
子句中使用它来过滤员工 ID:
INSERT INTO EMPLOYEE_ORDERS
SELECT EMPLOYEE.EMPLOYEE_ID
FROM ORDERS
LEFT JOIN EMPLOYEE ON ORDERS.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
GROUP BY EMPLOYEE.EMPLOYEE_ID
HAVING COUNT(ORDERS.EMPLOYEE_ID) > 0
请注意,ORDER BY
在您的子查询中没有任何意义,因为它不会对插入到表中的行产生任何影响。
另请注意,通过将 替换为LEFT JOIN
aJOIN
并交换表的顺序,您将自动仅获得具有 1 个或多个匹配订单的员工,从而使您可以简化查询:
INSERT INTO EMPLOYEE_ORDERS
SELECT DISTINCT EMPLOYEE.EMPLOYEE_ID
FROM EMPLOYEES
JOIN ORDERS ON ORDERS.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
推荐阅读
- python - 有没有办法在异步 python 中等待值
- python - 根据 str.split 的多个部分分配列名
- elasticsearch - Elasticsearch - 不支持小于 -1 字节的值查询节点
- python - 在熊猫中映射分类列的更好方法?
- arrays - Ruby Set 和 Ruby Array,它们是否使用 postgresql 以相同的方式存储?
- dax - 从 2 个事实表创建数据透视表
- mysql - MySql WHERE 与计数聚合列 - 不可能,那么解决方案是什么?
- .htaccess - How to allow access to files for all sites while maintaining htaccess redirection
- python - Python Sockets:客户端和服务器都相互发送和接收数据?
- pytorch - 图中似乎没有使用其中一个微分张量