![](/img/trans.png)
[英]MySQL Inner Join two tables and insert row from one table to other on matching row field
[英]Insert row into MySQL table result from query into one field and SQL function returned values into other fields
是否有可能在一个查询中将一行插入到 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';
我想将 projectID 和 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 级别执行此操作,而不是通过更高级别的工具。 谢谢你。
演示更新:
(问题内容不变)
您的查询无效,因为您没有正确使用括号。 当您使用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
关键字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.