gpt4 book ai didi

sql - 如何连接多个 MySQL 查询同时排除某些结果?

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

MySQLFiddle 在这里:http://sqlfiddle.com/#!2/12213/16

我正在尝试使用三个表。

表 1:users 表(在数据库中存储每个用户的数据)
表 2:users_fav 表(存储将其他用户添加为收藏夹的每个用户的数据)
表 3:users_lated 表(存储对其他用户进行评分的每个用户的数据)

users_favusers_latedusers_fav.uid 中存储进行评分或收藏的 users.uid > 或 users_lated.uid 列以及要添加到 users_fav.matchuidusers_lated.matchuid 的用户。

我想要的最终结果:
我需要从用户表中提取尚未被指定用户评级或收藏的所有用户。在 sql fiddle 数据中,尝试提取结果的用户是用户 id 1,该用户有其他几个用户出于测试目的而被评级和喜爱。

我已经构建了连接并尝试了一些方法,但无法得到我想要的结果。这是我尝试过的(请引用上面发布的 fiddle 中的数据和评论)。应该假设用户 id 1 正在尝试拉取用户 1 尚未收藏或评分的所有用户:

#attempt one shows no results
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav
ON users.uid=users_fav.matchuid
LEFT JOIN users_rated
ON users.uid=users_rated.matchuid
WHERE users.uid > 0
AND users.gender = 0
AND users_fav.uid <> 1
AND users_rated.uid <> 1
ORDER BY users.uid ASC;

这根本没有显示任何结果。我尝试过在 uid 以及 matchuid 上加入 users_favusers_lated 表。

#attempt two shows all results with gender 0
SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav
ON users.uid=users_fav.matchuid AND users_fav.uid <> 1
LEFT JOIN users_rated
ON users.uid=users_rated.matchuid AND users_rated.uid <> 1
WHERE users.uid > 0
AND users.gender = 0
ORDER BY users.uid ASC;

我尝试在第二个查询中使用连接进行排除。它似乎忽略了这一点,返回 7 个用户中的 6 个,仅排除性别为 1 的用户 1,该用户在查询中被排除。

最佳答案

可以工作...

SELECT users.uid, users.gender, users.username
FROM users
LEFT JOIN users_fav ON users.uid=users_fav.matchuid AND users_fav.uid = 1
LEFT JOIN users_rated ON users.uid=users_rated.matchuid AND users_rated.uid = 1
WHERE users_fav.uid IS NULL AND users_rated.uid IS NULL

这将为您提供所有未评级且不喜欢的人(最终您想要或?)

关于sql - 如何连接多个 MySQL 查询同时排除某些结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20513586/

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