mysql - 将查询结果插入到 MySQL 表中的一个字段中,并将 SQL 函数返回的值插入到其他字段中

标签 mysql function datetime

是否可以在一个查询中向 MYSQL 表中插入一行,并在其他字段中插入 MySQL 函数返回的值?

例如,我有下表:

CREATE TABLE monthly_hours
(
  ProjectID int,
  Year int,
  Month int,
  monthTotalTime int
);
  • 显示特定年份特定月份的项目工作时间。

我有一个查询,用于汇总项目上花费的总时间:

INSERT INTO time_monthly_hours ( `ProjectID`, `monthTotalTime` ) 
 SELECT jiraissue.PROJECT, SUM(worklog.timeworked) 
 FROM worklog, jiraissue 
 WHERE worklog.issueid = jiraissue.ID 
  AND jiraissue.PROJECT = 13262 
  AND worklog.startdate BETWEEN '2017-01-01 00:00:00' AND '2017-01-18 23:59:59';

我想将项目ID 和monthTotalTime 插入monthly_hours 表中的一行,以及月份和年份。

我尝试过:

INSERT INTO time_monthly_hours ( ProjectID, monthTotalTime,  Year, Month ) VALUES
( 
 SELECT jiraissue.PROJECT, SUM(worklog.timeworked) 
 FROM worklog, jiraissue 
 WHERE worklog.issueid = jiraissue.ID 
  AND jiraissue.PROJECT = 13262 
  AND worklog.startdate BETWEEN '2017-01-01 00:00:00' AND '2017-01-18 23:59:59' 
), 
  MONTH(CURRENT_DATE()), YEAR(CURRENT_YEAR() );

但这是一个无效的查询。我已经搜索了很多,但找不到像这样的解决方案来将 SQL 查询结果和 SQL 函数中的值同时放入一行。

请您指教。我需要在 MySQL 级别执行此操作,而不是通过更高级别的工具。谢谢。

演示更新:

(问题内容不变)

  • 根据 BeNice 的要求,我尝试增强格式以使其更具可读性
  • 我稍微更正了标题中的语法(需要使用复数字段),问题第一行中的“queryto”也被更正为“query to”。谢谢!

最佳答案

您的查询无效,因为您没有正确使用括号。当您使用 INSERT...VALUES() 时,语法必须为:

INSERT INTO <table> (col, col, col, col) VALUES (val, val, val, val);

但是你本质上有无效的语法,比如:

INSERT INTO <table> (col, col, col, col) VALUES (val, val), val, val;

使用一个返回两列的子查询还存在另一个问题。它不能用来代替 INSERT 语句的标量值。

此外,您还将 MONTH() 表达式与 Year 列相匹配,并将 YEAR() 表达式与 Month 列相匹配。

但它比你做的要简单。您可以将常量表达式放入 SELECT 中,因此 SELECT 有四列。

INSERT INTO time_monthly_hours ( ProjectID, monthTotalTime,  Year, Month )     
 SELECT jiraissue.PROJECT, SUM(worklog.timeworked),
  YEAR(CURRENT_DATE()), MONTH(CURRENT_DATE())
 FROM worklog, jiraissue 
 WHERE worklog.issueid = jiraissue.ID 
  AND jiraissue.PROJECT = 13262 
  AND worklog.startdate BETWEEN '2017-01-01 00:00:00' AND '2017-01-18 23:59:59' 

当您使用INSERT...SELECT时,您不需要VALUES关键字。

关于mysql - 将查询结果插入到 MySQL 表中的一个字段中,并将 SQL 函数返回的值插入到其他字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767517/

相关文章:

在没有辅助函数的情况下转换函数指针参数

mysql - DATETIME col 用于几乎所有 SELECT 操作的表的主键

MySQL函数: Error #1064

php - 有没有办法在 PHP 中追溯创建基于时间/节点的 UUID?

python - 将整数列表作为参数并返回运行总计列表的函数

javascript - 将用户 HTML 输入作为 javascript 函数参数传递

Python时区转换

python - 将 datetime.date 对象与 datetime.datetime 对象中的时间字符串组合

mysql - 检查列是否不为空或为空

mysql - SQL查询仅获取日期的最新值