![](/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.