2017-06-06 49 views
0

我有以下兩個表。 「曲目」表中沒有藝術家/曲目名稱(Thery都是NULL)。我想用'names'表中的artist_name和track_name來更新'曲目'。 「名稱」表有242,416,787條記錄,軌道表約有400萬條。 arist /曲目名稱由track_id關聯,所以我只希望條目形成「名稱」,我有track_ids。SQLite更新表與另一個表中的記錄子集的條目

CREATE TABLE tracks (
     s3_url VARCHAR(128), 
     track_id INTEGER KEY, 
     cluster_id INTEGER KEY, 
     rank INTEGER KEY, 
     group_id VARCHAR(128), 
     artist_name VARCHAR(128), 
     track_name VARCHAR(128), 
     set_name VARCHAR(128), 
     file_size INTEGER KEY); 

CREATE TABLE names (
     artist_name VARCHAR(128), 
     track_name VARCHAR(128), 
     track_id INTEGER KEY, 
     album_name VARCHAR(128)); 

這裏是我到目前爲止,這讓我的記錄中的名字「,我有track_ids爲:

SELECT names.artist_name, f.track_id FROM names INNER JOIN tracks AS f ON names.track_id=f.track_id 

我不能找出如何再東西的結果返回進入'軌道'表。我嘗試一些以下的效果:

UPDATE x SET artist_name=SELECT names.artist_name, f.track_id FROM names INNER JOIN tracks AS f ON names.track_id=f.track_id) AS x; 

這些線程hereand here來完成類似的事情,並表明JOIN/UPDATE在SQLite是不支持的。

想要的最終結果是用'names'中的artist_name和track_name填充'曲目'中的所有條目。

+0

不更新。加入時需要查看值。 –

回答

0

試試這個:

replace into tracks 
    (rowid, s3_url, track_id, cluster_id, rank, group_id, artist_name, track_name, set_name, file_size) 
select 
    t.rowid, t.s3_url, t.track_id, t.cluster_id, t.rank, t.group_id, n.artist_name, n.track_name, t.set_name, t.file_size 
from names n 
inner join tracks t on n.track_id = t.track_id 
; 

可作爲一個工作示例這裏:http://sqlfiddle.com/#!5/573148/1

+0

完美,謝謝你親愛的! – hogspogs

相關問題