【问题标题】:SQLite update table with entries from a subset of records in another tableSQLite 更新表,其中包含来自另一个表中的记录子集的条目
【发布时间】:2017-06-06 14:47:56
【问题描述】:

我有以下两张表。 'tracks' 表没有艺术家/曲目名称(它们当前都是 NULL)。我想用“名称”表中的艺术家名称和轨道名称更新“轨道”。 'names' 表有 242,416,787 条记录,tracks 表有大约 400 万条记录。艺术家/曲目名称由 track_id 关联,因此我只希望条目来自我拥有 track_ids 的“名称”。

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 完成类似的事情并表明SQLite 不支持JOIN/UPDATE。

所需的最终结果是使用“names”中的艺术家名和曲目名填充“曲目”中的所有条目。

【问题讨论】:

  • 不要更新。当您需要查找值时加入。

标签: sql sqlite


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多