mysql - 带有一个子查询的 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
不知道为什么至少我的子查询更新不起作用。谢谢
添加 。请注意,我认为我需要使用 GROUP,因为我想从 tbl_margin_all 中选择其他列,例如 Count(consignment_number) AS cons。我很抱歉!
原来我的问题是我使用的是更新而不是插入!
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
所以上面的查询对我有用
解决方案
如果您没有聚合函数,首先建议不要使用 grup by,在这种情况下,您可以使用 DISTINCT 子句
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
其次,您的更新代码是使用子查询的 dater 列结果更新列 dater 但在子查询中,您使用 where with dater = '01/08/18' ...这等于 set t2.dater = '01 /08/18'
您是否可以在更新列 dater 之后更新其他列,或者您只是想在表 tbl_margin_date 中插入子查询的结果
那么你应该使用
insert into tbl_margin_date (accont_no, dater)
SELECT distinct account_no, dater
FROM tbl_margin_all
WHERE dater = '01/08/18'
推荐阅读
- python - 从总值最高的 2 个数组中从 N 个数中选择 k 个
- reactjs - 满足条件时,如何停止在 refetchInterval 上运行的 react-query useQuery?
- javascript - Cloudflare 阻止 Flutter 中的 RSS 提要 - 在 Dart 中执行 javascript
- opencv - CMake 错误 ...:DNN:CUDA 后端需要 CUDA 工具包。请解决依赖关系或禁用 OPENCV_DNN_CUDA=OFF
- haproxy - 如何使用“http-response”行保护 HAProxy 2.2+ 中的 cookie?
- haxe - 在 Haxe 中,是否可以为其他类创建只读数组?
- php - symfony 桥将 phpunit 安装到 bin 目录
- amazon-web-services - AWS Route53 托管区域 ID 的 Reg exp?
- extjs - Ext js 问题 - 无法通过扩展模型来继承“has-many”
- php - 从 PHP 调用简单的 Golang 可执行文件失败并出现 exec:“zip”:在 $PATH 中找不到可执行文件