【问题标题】:Need a select statement to join two tables that are connected by a junction table, but one has null values需要一条 select 语句来连接通过联结表连接的两个表,但其中一个表具有空值
【发布时间】:2020-03-10 19:42:45
【问题描述】:

我有 3 张桌子: Artist、Song 和 song_artist(连接表)。

我需要列出所有歌曲的标题及其各自的艺术家,即使是没有艺术家的歌曲,但不是没有歌曲的艺术家。

Artist 表列:艺术家 ID、艺术家名称。

Song 表列:song_id、title、minutes、seconds、sales、genre_id。

song_artist 表列:song_id、artist_id

请指教。谢谢

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: sql


【解决方案1】:

如果你在 song 和 song_artist 之间没有匹配,那么你可以使用 LEFT JOIN

   select a.artists, 
          s.song_id
   FROM artist a
   INNER JOIN song_artist sa ON a.artist_id = sa.artist_id
   LEFT JOIN Song s ON s.song_id = sa.song_id

【讨论】:

    【解决方案2】:

    如果您想要所有歌曲,您需要left join。第一个表应该是songs

    select s.*, a.artist_name
    from songs s left join
         artist_songs ars
         on ars.song_id = s.song_id left join
         artists a
         on ars.artist_id = a.artist_id;
    

    【讨论】:

      【解决方案3】:

      您需要 SongSong_ArtistArtistLEFT 连接:

      select s.title, a.artist_name
      from song s 
      left join song_artist sa on sa.song_id = s.song_id
      left join artist a on a.artist_id = sa.artist_id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 2015-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多