gpt4 book ai didi

sql - 查找所有具有特定艺术家姓名轨道的播放列表?

转载 作者:行者123 更新时间:2023-11-29 13:09:30 24 4
gpt4 key购买 nike

我有两个 Postgres 表:playliststracks

我创建了 playlists_tracks,这是播放列表和轨道之间的多对多关系。

轨道包含多个列,但我正在查看的是艺术家

查询所有播放列表的列表的最快方法是什么,该列表至少包含一首轨道,其艺术家名称包含“The Beatles”?我很难想出一种有效的方法来做到这一点。

最佳答案

最便宜和最简单的DISTINCT操作是..首先不要乘以行。
一个EXISTS半连接会为您的查询做到这一点:

SELECT *
FROM playlists p
WHERE EXISTS (
SELECT -- can be empty for EXISTS
FROM playlists_tracks pt
JOIN tracks t USING (track_id)
WHERE pt.playlist_id = p.playlist_id
AND t.artist = 'The Beatles'
);

假设一个典型的多对多实现如下所述:

(您甚至可以嵌套 EXISTS 而不是子查询中的连接。不确定这是否有帮助。)

如果表很大,索引 可以帮助提高性能。特定查询的理想选择:

  • CREATE INDEX ON tracks (artist, track_id) -- 按此顺序列
  • CREATE INDEX ON playlists_tracks (track_id, playlist_id) -- 按此顺序列

相关:

关于sql - 查找所有具有特定艺术家姓名轨道的播放列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com