Mysql 使用两个具有相同限制的表无法获得正确的结果
1) 我有四个字段,如一个表中的物料号、物料号、数量和另一个表中的日期 输入: 第一张表:res6Mysql 使用两个具有相同限制的表无法获得正确的结果,mysql,sql,Mysql,Sql,1) 我有四个字段,如一个表中的物料号、物料号、数量和另一个表中的日期 输入: 第一张表:res6 Material item quantity ordnum 101 91 4 2 101 92 6 5 101 93 4 4 102 97
Material item quantity ordnum
101 91 4 2
101 92 6 5
101 93 4 4
102 97 5 8
103 98 3 7
第二张表:res7
Date item ordnum
2020-05-11 91 2
2020-05-11 92 5
2020-05-11 93 4
2020-05-11 97 8
2020-05-12 98 7
要求:我们需要考虑日期作为参考< /P>
2) 如果日期重复两次或n次,则输出应转到添加数量的第一项
输出:
Material item date quantity ordnum
101 91 2020-05-11 14 2
102 97 2020-05-11 5 8
103 98 2020-05-12 3 7
我使用了以下查询:
SELECT material, reqdate, SUM(quantity),
(
SELECT item
FROM res6 in_tab1, res7 in_tab2
WHERE in_tab1.material = out_tab1.material AND in_tab2.reqdate=out_tab2.reqdate
LIMIT 1) AS item
FROM res6 out_tab1, res7 out_tab2
GROUP BY material, reqdate;
但数量并没有增加。。请帮助尝试下面的脚本
你可以查一下
根据您的评论更新了下面的脚本-
根据您的评论进行最终查询。您只是缺少定义连接条件
试试这个
选择res7.date,
res7.1项目
来自res7
INNERJOIN res6
在res6.item=res7.item上
订购人
res7.date[ASC/DESC]两个表之间的关系是什么?还有,表1中的订购逻辑是什么?选择res6.ordnum、res6.item、res6.quantity、res6.material、res6.update、res7.shipres6、res7中的“reqdate”,其中res7.ordernum=res6.ordernum和res6.item=res7.item和pdate不为空;这是我们正在使用的查询,输出应该是数量的总和,如果请求日期重复,它应该转到第一项用它的CREATE table+INSERT INTO脚本替换类似于表的示例数据。不要跳过列(可能会将非唯一索引和外键跳过到未列出的表)。示例数据与说明不匹配。请提供正确的样本数据和预期输出。无法根据样本数据确定第一个项目-除非您可以说应使用最低订单号。对不起,它不应包括最小(项目),因为有时项目会是第一个,它是95,第二次92,第三次97,第四次91。。。但它应该指向第一个项目编号,即:;95,这就是为什么我使用了限制1。@ Rojimimple请检查我的第二个查询是否满足您的要求。我正在得到错误,比如“子查询返回超过1行”。我们不需要考虑OrdNUM。我们需要考虑“日期,材料”,如果日期是重复的,那么它应该转到第一项即将到来,并增加数量。若可以编写java代码,我认为sql查询将有助于解决问题,也是可行的解决方案。请你先考虑一下哪个订单是第一个?您至少需要一些列来排序,以便从一个物料编号中选择第一行@要求是“我们需要考虑”日期,材料,“如果日期是重复的,那么它应该转到第一个项目,来增加数量”。
SELECT Material,Date,
MIN (res6.item) Itemm,
SUM(quantity) quantity,
MIN(res6.ordnum) ordnum
FROM res6
INNER JOIN res7
ON res7.ordnum = res6.ordnum
AND res6.item = res7.item
AND Date IS NOT NULL
GROUP BY Material,Date
SELECT B.Material,
(SELECT item FROM res6 WHERE Material = B.Material AND ordnum = MIN(A.ordnum)) item,
A.DATE,
(SELECT SUM(quantity) FROM res6 WHERE Material = B.Material) quantity,
MIN(A.ordnum) ordnum
FROM res7 A
INNER JOIN res6 B ON A.item = B.item AND A.ordnum = B.ordnum
GROUP BY B.Material,A.DATE
SELECT material, reqdate,
SUM(quantity),
(
SELECT in_tab1.item
FROM res6 in_tab1, res7 in_tab2
WHERE in_tab1.material = out_tab1.material
AND in_tab2.reqdate=out_tab2.reqdate LIMIT 1
) AS item
FROM res6 out_tab1
-- Converted Joining as standard practice
INNER JOIN res7 out_tab2
ON out_tab1.item = out_tab2.item -- Missing
AND out_tab1.ordnum = out_tab2.ordnum -- Missing
GROUP BY material, reqdate