2016-09-18 95 views
1

我有兩個表,其中一個是'user_flag',另一個是'playlist_data'。從另一個表插入並插入新值

我想將'user_flag'的所有'object_id'列條目放到'playlist_data'的相應'object_id'列中,但只有這些條目具有'3'作爲'user'條目,並且他們不存在(沒有重複的object_id!)。

我努力學習如何做到這一點,這是我發現:

INSERT INTO playlist_data (object_id) 
SELECT object_id FROM user_flag 
WHERE user='3'; 
ON DUPLICATE KEY UPDATE object_id=object_id 

將這項工作是否正常?

但我也試圖在同一時間做更多,我似乎無法找到答案:

1)我也想插入這個新的數據。我希望所有新插入的條目在'playlist_data'的'filetype'列中也包含'5'。

難道我只是

INSERT INTO playlist_data (filtype) 
VALUES (5) 

在這一切的中間?

2)兩張表都有一個'id'列,它會自動生成一個新的id,然後是'playlist_data'的最新id。例如,我將'user_flag'的'id'改爲'150',而'playlist_data'中的最高'id'爲'63',插入的' 64',還是我需要以某種方式定義?

回答

0

只是在SELECT添加值:

INSERT INTO playlist_data (object_id, filtype) 
    SELECT object_id, 5 
    FROM user_flag 
    WHERE user = 3 
    ON DUPLICATE KEY UPDATE object_id = VALUES(object_id); 

注:

  • 我猜測ID列是數字。因此,我刪除了單引號。
  • 我在ON DUPLICATE KEY UPDATE中使用VALUES(object_id)
  • 僅在聲明的最後纔有分號是非常重要的。
+0

那麼解釋了爲什麼它不起作用,我沒有正確放置分號。我現在開始明白,這是一句話,爲了更好的佈局而分成多行。但是,我忘了注意'user_flag'沒有'文件類型'列,我只想插入全新的值,而不是從'user_flag'轉移它,它仍然可以工作嗎? – Potatoman

+0

corse。這段代碼插入值5. –

+0

@Patatoman自己讀取'SELECT'查詢,你會發現它不是試圖從'user_flag'訪問'filtype'。它只是在該列中選擇一個文字「5」。 – Barmar