访问外键记录时出现问题

时间:2019-12-05 04:30:59

标签: sql sqlite foreign-keys

我有一个包含数百万个条目的数据集,其中包含歌曲及其艺术家。

我有

  • 轨道ID和
  • 艺术家ID。

有3张桌子

  • 曲目(track_id,标题,artist_id)
  • 艺术家(artist_id和artist_name)和
  • artist_term(artist_id和term)。

现在,我想查找artist_id,artist_name和特定track_id的术语。

我如何找到它?找到track_id的artist_id,很简单。我写了

A

当我写信

0

它显示有关艺术家姓名和期限的多个记录。

当我写信

(select artist_id, track_id FROM tracks WHERE tracks.track_id = 'TR12739847';)

它说出了不明确的artist_id或没有这样的列。

有关更多参考,表的架构如下:

(select artist_name, term FROM tracks t join artists a on t.artist_id = a.artist_id join artist_term at on at.artist_id = a.artist_id WHERE track_id = 'TR12739847';)

如何获得解决方案? 我哪里错了?我可能错过了一点点小东西,或者这可能是一个非常基本的问题,但是我陷入了困境。

请帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

  

我写(select artist_name, term, artist_id, track_id FROM tracks join artists on tracks.artist_id = artists.artist_id join artist_term on artist_term.artist_id = artists.artist_id WHERE tracks.track_id = 'TR12739847';)时说模糊的artist_id或没有这样的列

查询无法解析,因为您要加入具有相同通用名的表,例如:Artists表以及artist_term表中都存在artist_id,因此它询问您查询该查询时应引用哪一列

select artist_name, term, artist_id, track_id

要解决此问题,请为要引用的表创建一个别名,然后将该别名添加到列之前

例如:

  select artists.artist_name
       , artist_term.term
       , tracks.artist_id
       , tracks.track_id 
  FROM tracks  
  join artists  
    on tracks.artist_id = artists.artist_id 
  join artist_term 
    on artist_term.artist_id = artists.artist_id 
 WHERE tracks.track_id = 'TR12739847';