一个子查询的MySQL更新

时间:2018-12-25 07:35:17

标签: mysql

SELECT account_no,
       dater
FROM   tbl_margin_all
WHERE  dater = '01/08/18'
GROUP  BY account_no,
          dater

这给了我149行结果。 我现在要将这些结果复制到一个空表中。

UPDATE tbl_margin_date t2,
       (SELECT account_no,
               dater
        FROM   tbl_margin_all
        WHERE  dater = '01/08/18'
        GROUP  BY account_no,
                  dater) t1
SET    t2.dater = t1.dater

以上方法不起作用,我不明白为什么。 dater只是一个保存日期的字符串。 dater的两个表都是varchar(8)。两者的Account_no均为varchar(6)。我不认为我可以加入,因为tbl_margin_date为空。我尝试了加入,但没有成功。 它只返回受影响的零行。与上面的子查询查询相同

UPDATE tbl_margin_date t2
       JOIN (SELECT account_no,
                    dater
             FROM   tbl_margin_all
             WHERE  dater = '01/08/18'
             GROUP  BY account_no,
                       dater) t1
         ON t2.dater = t1.dater
            AND t2.account_no = t1.account_no
SET    t2.dater = t1.dater 

不知道为什么至少我的带有子查询的更新无法正常工作。谢谢

添加。请注意,我认为我需要使用群组,因为我想 从tbl_margin_all选择其他列,例如Count(consignment_number)AS缺点。 抱歉!

发现我的问题是使用INSERT的UPDATE代替!

INSERT INTO tbl_margin_date (dater, account_no, cons)
SELECT dater, account_no, COUNT(cons) FROM tbl_margin_all WHERE dater='2018-01-02'
GROUP BY account_no, dater

这对我来说很有效

1 个答案:

答案 0 :(得分:0)

如果没有聚合功能,建议不要使用grup,在这种情况下,可以使用DISTINCT子句

<View style={ my_styles.st_1.subStyle_2 } /> //returned {backgroundColo: 'blue'}

第二次,您的更新代码将用子查询的dater列结果更新列dater,但是在子查询中,您使用的位置dater = '01 / 08/18'...这等于设置t2.dater = '01 / 08/18'

您是否需要更新列日期者,然后再更新其他列,或者您只是想将子查询的结果插入表tbl_margin_date

那么您应该使用

UPDATE tbl_margin_date t2
JOIN (
  SELECT  distinct account_no,
          dater
  FROM   tbl_margin_all
  WHERE  dater = '01/08/18'
 ) t1  ON t2.dater = t1.dater
        AND t2.account_no = t1.account_no
SET    t2.dater = t1.dater