SQL:分配序列号

时间:2014-02-24 08:48:58

标签: sql sqlite

我想在表中添加一组行时分配序列号。我该怎么做呢?我想过使用COUNT()或ROWID,但我无法弄清楚如何。

假设我有一个包含三列的表:PlayListID,TuneID和SequenceNum

我想创建一个新的曲调播放列表,所以我要为PlayListID为2添加一堆TuneID值。 TuneID按艺术家,专辑和曲目编号排序。这就是我目前所拥有的:

SELECT TuneID From Tunes
WHERE ArtistID=2
ORDER BY AlbumID, TrackNum

我想我要做的是保留订购信息 - 确保在检索到PlayListID=2的所有曲调时,它们都有一个表示其顺序的列。 TrackNum无法使用,因为它们可能是多个相册,我可能会编写另一个查询以便以其他顺序检索它们。

那么,我如何修改下面的命令来为插入的每一行添加一个升序列(序列)值?

INSERT INTO Playlist (Name,Seq)
SELECT Name, ??? As Seq FROM Tunes
WHERE ArtistID=2
ORDER BY AlbumID, TrackNum

我正在使用SQLite。我不想使用自动增量,因为我希望每个播放列表ID的Seq编号为1。

2 个答案:

答案 0 :(得分:0)

尝试thiz: INSERT INTO播放列表(名称,Seq) SELECT Name,rownum FROM Tunes WHERE ArtistID = 2 订购AlbumID,TrackNum;

答案 1 :(得分:0)

工作中的SQL天才解决了我的问题。这是解决方案 - 创建一个具有自动递增列的临时表..

CREATE TEMP TABLE New_Playlist (Seq INTEGER PRIMARY KEY AUTOINCREMENT, TuneID INTEGER);

INSERT INTO New_Playlist (TuneID)
SELECT TuneID FROM Tunes
WHERE ArtistID=2
ORDER BY AlbumID, Track;

INSERT INTO Playlist (TuneID, Name, Seq)
SELECT t.TuneID, t.Name, np.Seq
FROM New_Playlist np JOIN Tunes t ON t.TuneID = np.TuneID;

DROP TABLE New_Playlist;