sql - 在单个语句中选择 "many to many"和 "belongs to"

标签 sql postgresql

user_playlist
-------------
user_id
playlist_id

user
-------------
id
name

playlist
-------------
id
user_id
name

分解来看,播放列表可以是公共(public)的(使用联结表分配给用户)或私有(private)的(通过设置播放列表 user_id 属于用户)。如何在一次选择中查询用户的所有播放列表?这可能吗?

最佳答案

此查询应该会为您提供所需的结果。它通过 user_playlist(对于公共(public)播放列表)或直接(对于私有(private)播放列表)JOINuserplaylist :

SELECT DISTINCT p.id, p.name
FROM user u
LEFT JOIN user_playlist up ON up.user_id = u.id
JOIN playlist p ON p.id = up.playlist_id OR p.user_id = u.id

您可以只添加一个适当的WHERE 子句(例如u.id = 4u.name = 'bill')来选择感兴趣的用户。

Demo on dbfiddle

关于sql - 在单个语句中选择 "many to many"和 "belongs to",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58253450/

相关文章:

php - 从表单上的 Post 请求创建 SQL 表

mysql - 带有 group by 的特定 SQL 无法正常工作

MySQL 按降序获取唯一值

sql - postgresql 使用 "ON CONFLICT"子句语义插入行的方法

ruby-on-rails-3 - Heroku + Rails + PostgreSQL 问题

mysql - ' ' 即单引号空间单引号在sql中如何工作?

sql - 调用存储过程插入多个值

javascript - 使用 supabase 计算 DISTINCT 值的出现次数

windows - Rstudio 无法连接到 Windows 机器上启用 SSL 的 postgresql 服务器

ruby-on-rails - 从第二个数据库中提取数据的有效方法?