2017-05-28 122 views
0

我只是想创建一个新的播放列表,其中包含所有存储的曲目中最长的10首歌曲。这里是我的代码和下面的架构,请解释一下,请解释我如何将播放列表和轨道的foriegn键关联到PlaylistTrack?在SQLite3中关联外键

INSERT INTO Playlist (PlaylistID, Name) 
VALUES (19, 'Background Music'); 

SELECT TrackID, Name, Millisecond 
FROM Track 
ORDER BY Millisecond DESC 
LIMIT 10 
JOIN Track.TrackID = PlaylistTrack.TrackID 
WHERE Playlist.Name = 'Background Music'; 

架构:

CREATE TABLE Playlist 
(
    PlaylistID INTEGER PRIMARY KEY NOT NULL, 
    Name TEXT 
); 



    CREATE TABLE PlaylistTrack 
    (
     PlaylistID INTEGER NOT NULL, 
     TrackID INTEGER NOT NULL, 
     PRIMARY KEY (PlaylistID, TrackID), 
     FOREIGN KEY (PlaylistID) REFERENCES Playlist (PlaylistID) 
        ON DELETE NO ACTION ON UPDATE NO ACTION, 
     FOREIGN KEY (TrackID) REFERENCES Track (TrackID) 
        ON DELETE NO ACTION ON UPDATE NO ACTION 
    ); 




    CREATE TABLE Track 
(
    TrackID INTEGER PRIMARY KEY NOT NULL, 
    Name TEXT NOT NULL, 
    AlbumID INTEGER, 
    MediaTypeID INTEGER NOT NULL, 
    GenreID INTEGER, 
    Composer TEXT, 
    Millisecond INTEGER NOT NULL, 
    Byte INTEGER, 
    UnitPrice REAL NOT NULL, 
    FOREIGN KEY (AlbumID) REFERENCES Album (AlbumID) 
       ON DELETE NO ACTION ON UPDATE NO ACTION, 
    FOREIGN KEY (GenreID) REFERENCES Genre (GenreID) 
       ON DELETE NO ACTION ON UPDATE NO ACTION, 
    FOREIGN KEY (MediaTypeID) REFERENCES MediaType (MediaTypeID) 
       ON DELETE NO ACTION ON UPDATE NO ACTION 
); 

感谢。

回答

0

尝试放置LIMIT条款在它所属的查询的末尾:

SELECT 
    t.TrackID, t.Name, t.Millisecond 
FROM Track t 
INNER JOIN PlaylistTrack p 
    ON t.TrackID = p.TrackID 
WHERE p.Name = 'Background Music' 
ORDER BY t.Millisecond DESC 
LIMIT 10 
+0

嘿感谢FOT的帮助下,我得到了一个错误与代码,所以我试图测试一些变化。此代码给我没有错误,但也没有答案哈哈,你能给我任何指针? SELECT t.TrackID,t.Name,t.Millisecond FROM轨道T INNER JOIN PlaylistTrack p ON t.TrackID = p.TrackID WHERE p.PlaylistID = 19 ORDER BY t.Millisecond DESC LIMIT 10; –

+0

@JamesPeters我的答案有一个流浪分号。如果你盲目地剪下和粘贴上面给出的东西,你会得到一个错误。关于你的第二个查询,你的表中可能没有匹配的记录。 –