Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Sql - Fatal编程技术网

Mysql 使用两个具有相同限制的表无法获得正确的结果

Mysql 使用两个具有相同限制的表无法获得正确的结果,mysql,sql,Mysql,Sql,1) 我有四个字段,如一个表中的物料号、物料号、数量和另一个表中的日期 输入: 第一张表:res6 Material item quantity ordnum 101 91 4 2 101 92 6 5 101 93 4 4 102 97

1) 我有四个字段,如一个表中的物料号、物料号、数量和另一个表中的日期

输入: 第一张表:res6

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