2012-10-03 27 views
0

我有2個表:大規模更新,從加入

movies (id, votes) 
info (id, movie_id, info_type, value) 

我想填充info.value,movies.votes其中movies.id = info.movi​​e_id和資訊類型= 3(這是您的信息類型票)

我無法弄清楚如何做到這一點。(我使用SQLite3.7)

回答

1
UPDATE movies 
SET votes = (select value 
      from info 
      where info.movie_id=movies.id and info_type=3) 
WHERE EXISTS 
      (select * 
      from info 
      where info.movie_id=movies.id and info_type=3) 

僅供參考EXISTS的是有這麼說,如果沒有爲電影沒有info數據,這些不要更新到NULL。如果您希望發生這種情況,可以將其刪除。

+0

雖然這是非常緩慢..這是正常的嗎?每列都有一個索引..有幾十萬,所以也許這是正常的。 – luca

+0

你正在使用SQLite爲一個有幾十萬行的表?不幸的是,由於缺乏對從聯接更新的支持,這將會很糟糕。 – RichardTheKiwi

0

它看起來像你想要做一個多表UPDATE,這是在其他數據庫中直截了當,但根據the documentation它看起來像你不能在sqlite中做到這一點。

在mysql中,你會做類似UPDATE movies JOIN info on (info.movie_id = movies.id) SET votes = info.value WHERE info.info_type = 3。我想在sqlite中,你必須單獨選擇所有的信息值,並單獨更新所有的電影記錄。