Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql:在子查询中引用主查询中的列_Mysql - Fatal编程技术网

MySql:在子查询中引用主查询中的列

MySql:在子查询中引用主查询中的列,mysql,Mysql,下表应反映的是 采购,在不同的时间收到部分采购。(我省略了日期栏。) 假设purchase 10分为三部分,分别存放在两个不同的位置(5和6) 现在我想选择那些有超过2000公斤(数量)的存货。这可以通过 SELECT stockId AS id, SUM(quantity) AS q FROM stock WHERE purchaseNo=10 GROUP BY stockId HAVING q>2000 但是因为我只对stockId感兴趣,所以我也希望避免退回数量。这可能吗? 我失败

下表应反映的是 采购,在不同的时间收到部分采购。(我省略了日期栏。)

假设purchase 10分为三部分,分别存放在两个不同的位置(5和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返回以下错误:


错误1054(42S22):“where子句”中的未知列“id”

您可以将
总和
传递给
HAVING
,并从结果中跳过它

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

示例。

您尝试过类似的方法吗

SELECT distinct S1.stockId AS S1.id from stock S1
inner join(
SELECT S2.stockId AS S2.id, SUM(S2.quantity) AS S2.q
FROM stock S2
WHERE S2.purchaseNo=10
GROUP BY S2.stockId
HAVING S2.q>2000)
on S1.stockId=S2.stockId

从查询中删除作为q的总和(数量)。主键是什么?好!就这么简单!谢谢你,彼得。
SELECT stockId AS id
FROM stock
WHERE purchaseNo=10
GROUP BY stockId
HAVING SUM(quantity)>2000;
SELECT distinct S1.stockId AS S1.id from stock S1
inner join(
SELECT S2.stockId AS S2.id, SUM(S2.quantity) AS S2.q
FROM stock S2
WHERE S2.purchaseNo=10
GROUP BY S2.stockId
HAVING S2.q>2000)
on S1.stockId=S2.stockId