gpt4 book ai didi

sql - 多对多关系中的 AND 条件

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

假设我有三个表,一个用户表,一个包含大约 500 个不同项目的表,以及相应的连接表。我想做的是:

select * from users u join items_users iu on iu.user_id = u.id
where iu.item_id in (1,2,3,4,5)
and u.city_id = 1 limit 10;

除了 IN 条件之外,我想找到拥有所有 相应项目的用户。如果有帮助,假设一次搜索的最大项目数为 5。此外,我使用的是 Postgres,如果有帮助,请不要介意对其进行非规范化,因为它是一个只读系统并且速度最高优先级。

最佳答案

这是关系划分的另一种情况。我们已经收集了大量的查询来处理这类问题 here .

在这种情况下,如果有 5 个或更多项,我可能会尝试:

SELECT u.*
FROM users AS u
WHERE u.city_id = 1
AND EXISTS (
SELECT *
FROM items_users AS a
JOIN items_users AS b USING (user_id)
JOIN items_users AS c USING (user_id)
...
WHERE a.user_id = u.user_id
AND a.item_id = 1
AND b.item_id = 2
AND c.item_id = 3
...
)
LIMIT 10;

它是我测试中最快的,它符合 items_users 的多个条件的要求,同时只返回来自 user 的列。

了解 indexes at the linked answer .这些对于性能至关重要。因为你的表是只读的,所以我也会 CLUSTER两个表,以尽量减少必须访问的页面数。如果不出意外,CLUSTER items_users(user_id, item_id) 上使用多列索引。

关于sql - 多对多关系中的 AND 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333433/

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