2017-01-20 11 views
2

MYSQLテーブルに行を挿入するクエリと、他のフィールドのMySQL関数から返される値は同じですか?例えば1つのフィールドにクエリから結果をSQLテーブルに挿入し、SQL関数が他のフィールドに値を返しました

、私は以下の表を持っている:

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'; 

をそして私は月と年で、monthly_hoursテーブルの行にPROJECTIDとmonthTotalTimeを挿入したいです。

私が試した:

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」もクエリーするように修正されました。ありがとう!
+0

データを少し読みやすくしてください(改行)できますか? – BeNice

答えて

2

かっこを正しく使用しなかったため、クエリが無効です。あなたが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; 

は、2つの列を返す1つのサブクエリを使用して、別の問題があります。これは、INSERTステートメントのスカラー値の代わりに使用することはできません。

また、MONTH()式をYearカラムに、YEAR()式をMonthカラムに一致させました。

しかし、あなたが作っているよりも簡単です。定数式をSELECTに入れることができます。そのため、SELECTには4つのカラムがあります。

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' 

あなたがVALUESキーワードを必要としないINSERT...SELECT使用しています。

+0

(1 of 2)+1 upvoteと受け入れられた答えは、あまりにもBillに感謝します。 'YEAR(CURRENT_YEAR())'が 'YEAR(CURRENT_DATE()) 'になるように元のクエリを修正しました。 (INSERT INTO time_monthly_hours(ProjectID、monthTotalTime))SELECT jiraissue.PROJECT、SUM(worklog.timeworked)、YEAR(CURRENT_DATE(2))のように、クエリ全体が読み込まれます(コメント内の限られた書式は許されません)。 – therobyouknow

+0

)、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 ';' – therobyouknow

+1

非常に良い。私はCURRENT_DATE()も修正する答えによって編集しました。私はそれまで気付かなかった。喜んで助けてください。 –

関連する問題