gpt4 book ai didi

sql - 在 postgres 中,用连接表执行 AND 的最佳方法是什么?

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

我有不同类别的用户,以及一个允许用户属于多个类别的连接表。我的连接表称为 categories_users,它由 user_id 和 category_id 组成。

我想筛选同时属于类别 1 和类别 2 的用户。例如,我想找到对棒球和足球都感兴趣的所有人。

在 PostgreSQL 中执行此操作的最佳方法是什么?我有以下工作:

select * from users 
where users.id IN
( Select categories_users.user_id from categories_users
JOIN categories ON categories.id = categories_users.category_id
where categories.id = 1 OR categories.parent_id = 1)
AND users.id IN
(Select categories_users.user_id from categories_users
JOIN categories ON categories.id = categories_users.category_id
where categories.id = 2 OR categories.parent_id = 2)

然而,这感觉很笨拙,我想知道是否有更好的方法来做到这一点。我尝试了各种连接,但最终总是在 categories_users 表中搜索 category_id 为 1 和 2 的行,这是不可能的。

编辑,我实际上还需要搜索父类别,所以我更改了上面的查询以包含 parent_id

最佳答案

只需连接同一个表两次(使用别名):

SELECT u.*
FROM users u
JOIN categories_users cu1 ON cu1.user_id = u.id
JOIN categories_users cu2 ON cu2.user_id = u.id
WHERE cu1.category_id = 1 AND cu2.category_id = 2

关于sql - 在 postgres 中,用连接表执行 AND 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43472015/

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