mysql - 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'
解决方案
您可以传递SUM
toHAVING
并从结果中跳过它。
SELECT stockId AS id
FROM stock
WHERE purchaseNo=10
GROUP BY stockId
HAVING SUM(quantity)>2000;
SQLFiddle示例。
推荐阅读
- sql - sql查询父子记录
- python - 如何在 python 脚本中设置变量并在每次脚本运行时更改它们?
- python - 具有不同标记大小和信息图例的 Seaborn 散点图
- python - 如何通过爬虫获取简单信息
- python - 具有动态内容的 Python 解析页面
- c# - 如何在C#中将整数序列转换为序数
- linux - 如何将多个命名空间与同一个命名空间linux连接起来
- android - file.createNewFile() 给出 java.io.IOException: Not a directory
- javascript - 如何在表单提交后更改 HTML 表格数据值
- powershell - VM 上的 Powershell 脚本作为计划任务