首页 > 解决方案 > MySql:在子查询中引用主查询中的列

问题描述

下表应反映采购的存储位置 (stockId),其中在不同时间分批接收采购。(我省略了日期列。)

CREATE TABLE stock (purchaseNo INT NOT NULL, quantity INT NOT NULL, stockId INT NOT NULL)

假设购买的 10 分三部分送达并存储在两个不同的位置(5 和 6)。

INSERT INTO stock VALUES(10, 2000, 5)
INSERT INTO stock VALUES(10, 3000, 5)
INSERT INTO stock VALUES(10, 1000, 6)

现在我想选择那些有超过 2000 公斤(数量)可用的股票。这可以通过

SELECT stockId AS id, SUM(quantity) AS q
FROM stock
WHERE purchaseNo=10
GROUP BY stockId
HAVING q>2000

但由于我只对 stockId 感兴趣,所以我也想防止数量被退回。这可能吗?我失败的尝试之一是

SELECT stockId AS id
FROM stock
WHERE purchaseNo=10 AND (SELECT SUM(quantity) FROM stock WHERE purchaseNo=10 AND stockId=id) >2000

有或没有 GROUP BY 都会返回以下错误:

ERROR 1054 (42S22): Unknown column 'id' in 'where clause'

标签: mysql

解决方案


您可以传递SUMtoHAVING并从结果中跳过它。

SELECT stockId AS id
FROM stock
WHERE purchaseNo=10
GROUP BY stockId
HAVING SUM(quantity)>2000;

SQLFiddle示例。


推荐阅读