2017-01-24 6 views
1

現在、私のクエリで問題が発生しています。私はなぜそれが動作しているのか知りません。これは私のクエリです:selectでカウントを取得する重複キー更新でINSERT SELECTを選択

INSERT INTO tbl_leave_count (leave_count,leave_user_id,leave_id) 
SELECT COUNT(*) as leaveCount, leave_user_id,leave_id 
FROM tbl_leaverequest 
WHERE leave_user_id=2 AND leave_id = 1 
ON DUPLICATE KEY UPDATE leave_count = leaveCount; 

しかし、私は、数値に更新休暇カウントの値を置き換え、それが動作:

INSERT INTO tbl_leave_count (leave_count,leave_user_id,leave_id) 
SELECT COUNT(*) as leaveCount, leave_user_id,leave_id 
FROM tbl_leaverequest 
WHERE leave_user_id=2 AND leave_id =1 
ON DUPLICATE KEY UPDATE leave_count=5; 

私は、クエリ内のSELECT文から値を取得したいです[ COUNT(*)as leaveCount]をクリックします。どうしたらいいですか?

+0

データ型とその値を使用する際は注意してください。 –

答えて

0

同じである必要がありますが、ここでサブクエリを使用して試すことができます:

INSERT INTO tbl_leave_count (leave_count, leave_user_id, leave_id) 
SELECT leaveCount, leave_user_id, leave_id 
FROM 
(
    SELECT (SELECT COUNT(*) FROM tbl_leaverequest 
      WHERE leave_user_id = 2 AND leave_id = 1) AS leaveCount, 
      leave_user_id, 
      leave_id 
    FROM tbl_leaverequest 
    WHERE leave_user_id = 2 AND leave_id = 1 
) t 
ON DUPLICATE KEY UPDATE leave_count = t.leaveCount; 

私はCOUNT(*)が非集計列に表示されますので、あなたの元SELECTは、問題があると思います。私はサブクエリを使用してWHERE句の条件を指定して、tbl_leaverequestの数を見つけることでこれを回避しました。

+0

ニース。どうもありがとうございました –

0

列名は

INSERT INTO tbl_leave_count (leave_count,leave_user_id,leave_id) 
(SELECT COUNT(*) as leave_count, leave_user_id,leave_id FROM tbl_leaverequest WHERE leave_user_id=2 AND leave_id =1) 
ON DUPLICATE KEY UPDATE leave_count=5; 
関連する問題