SQLite查询从多个表中获取数据

时间:2014-10-10 13:39:12

标签: sqlite

我有4张桌子,

  

ModTable   file_id,mod_flag

     

TrackTable   artist_id   album_id   FILE_ID   标题

     

AlbumTable   album_id,专辑

     

ArtistTable   artist_id,艺术家

我需要从这些表中获取artist_id,album_id,album,artist,fid,title以获取所有file_id,其中mod_flag = 1

到目前为止,我所做的是(伪代码)

 1. SELECT file_id, artist_id, album_id, title FROM TrackTable WHERE file_id IN (SELECT file_id FROM ModTable WHERE mod_flag=1);     

在极端情况下,这将返回大约30000个file_ids。所以对于所有这些file_ids,

 2. for(int count=0; count < noOfRecords/*30000*/; count++)          
    SELECT artist FROM ArtistTable WHERE artist_id==%llu     
    SELECT album FROM AlbumTable WHERE album_id==%llu     

以上查询对我有用,但我想知道这是否是实现此目的的优化方式。我应该避免循环内的查询吗?

1 个答案:

答案 0 :(得分:1)

Normaly你会加入如下表格。这应该会带来更好的性能,因为连接可以通过查询引擎进行优化。

SELECT 
  t.file_id, 
  t.artist_id, 
  t.album_id, 
  t.title,
  a.album,
  ar.artist
FROM 
  TrackTable t 
  join AlbumTable a on t.album_id = a.album_id
  join ArtistTable ar on t.artist_id = ar.artist_id
WHERE t.file_id IN (SELECT file_id FROM ModTable WHERE mod_flag=1);