2017-03-26 45 views
0

我看了很多類似於我的問題,但沒有找到我要找的東西,也許你們可以幫我更新記錄如果特定列中存在某個值,或者插入一個新的記錄

我有這個表:

enter image description here

我想要做的是:

  • 插入一個新的記錄(無論 「user_ID的」 或 「COURSE_ID」 的alread是否存在)。
  • 但是,如果有一個記錄具有相同的「user_id」和「course_id」和「tutorial_id」,那麼只需更新「tutorial_id」和「tutorial2_id」,並保持原樣。

我不想聲明列「tutorial_id」爲UNIQUE,因爲多個用戶可以具有相同的「tutorial_id」(如上圖所示)。

另外,ON DUPLICATE KEY UPDATE對我不起作用。

我正在考慮使用QUERY兩次,一個選擇並檢查記錄是否存在,另一個是否更新或插入,但是是否正確?

+0

顯示你的'ON重複鍵UPDATE'的用法,你可以使這三個獨特的一對,所以不僅僅'tutorial_id'將是獨一無二的。例如'ALTER TABLE TABLE_NAME add CONSTRAINT UQ_user_course_tut UNIQUE(user_id,course_id,tutorial_id)' – chris85

+0

然後你需要創建獨特的鍵acr oss這三列,然後重複鍵更新將工作。 – Niagaradad

+0

*另外,ON DUPLICATE KEY UPDATE不適用於我。*爲什麼?你的'PRIMARY KEY'是什麼? 'user_id'和'course_id'是唯一的組合嗎? –

回答

0

使用INSERT ... ON DUPLICATE KEY UPDATE ... syntax。爲了它的工作。

如果您的user_idcourse_id組合是唯一的,您可以從表中刪除id字段,並將這兩個字段設爲主鍵。

在該id領域也需要,使三者的獨特組合爲每個記錄,然後讓這三個字段,你表(iduser_idcourse_id)主鍵的任何其他情況。

+0

我很感謝你的建議,非常感謝。 – iHam9

0

如何發出UPDATE第一,如果沒有記錄受到影響(使用row_count()然後INSERT?這樣,你只有一次測試的存在狀態。

rextester demo

update test set tutorial2_id = @tutorial2 
where user_id = @user_id and course_id = @course_id and tutorial_id = @tutorial_id; 

insert into test (user_id, course_id, tutorial_id, tutorial2_id) 
select @user_id, @course_id, @tutorial_id, @tutorial2_id) 
where row_count() = 0; 
+0

非常感謝,通過製作三個獨立的列來解決問題。 – iHam9

相關問題