gpt4 book ai didi

sql - 连接查询有问题

转载 作者:行者123 更新时间:2023-11-29 01:34:23 25 4
gpt4 key购买 nike

我在 Web 应用程序中实现自制 ACL 系统,这让我很吃力。我相信这是微不足道的,只是无法理解它。

我在一对多关系中有 3 个表:
资源, perms_group, perms_users其中 perms_group 是一个关键表,而 perms_users 允许我在需要时微调每个用户的访问权限(它加起来为 perms_users 或只是简单地覆盖它,两个表都将权限存储为单独列中的 bool 值)。

我正在尝试从资源中获取内容并在单个查询中获取权限:

SELECT *
FROM resource
LEFT OUTER JOIN perms_groups ON resource.id = perms_group.res_id
LEFT OUTER JOIN perms_users ON resource.id = perms_users.res_id
WHERE resource.id = 1
AND perms_group.group_id = 2
AND perms_users.user_id = 3

现在的问题是很少会设置用户的精细权限,在这种情况下上面的查询将返回 0 行。我想告诉我的是让我为第 2 组和第 3 位用户取回烫发如果有的话。基本上我缺少 AND_IF_EXISTS 运算符;)。我可以轻松地将它分解为两个查询,但由于它会在每次页面刷新时运行,所以我需要它尽可能精简。目前我正在使用 MySQL,但稍后想切换到 PostgreSQL,因此理想的解决方案是独立于数据库的。有什么想法吗?

谢谢

最佳答案

SELECT *
FROM resource
LEFT OUTER JOIN perms_groups ON resource.id = perms_group.res_id
AND perms_group.group_id = 2
LEFT OUTER JOIN perms_users ON resource.id = perms_users.res_id
AND perms_users.user_id = 3
WHERE resource.id = 1

事实上,如果你不知道你是否有数据,你在表上写一个条件,左外连接是没有用的。

关于sql - 连接查询有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1069826/

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