2017-06-06 50 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

相关问题