sql - 如何排除特定表寄存器中的查询
问题描述
我想在查询中嵌套一些数据。我列出用户,然后显示一个按钮来编辑权限,它会发送 user_id 并查询他拥有哪些权限。有两个表:
允许
CREATE TABLE IF NOT EXISTS permission(
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
name varchar(200) NOT NULL,
platform varchar(200) NOT NULL,
);
users_permission
CREATE TABLE IF NOT EXISTS users_permission(
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
users_id uuid NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
permission_id uuid NOT NULL REFERENCES permission(id) ON UPDATE CASCADE ON DELETE CASCADE,
create_active boolean NOT NULL,
read_active boolean NOT NULL,
update_active boolean NOT NULL,
delete_active boolean NOT NULL,
is_active boolean NOT NULL DEFAULT true
);
users_permission 从 users 表接收一个 uuid。考虑到这一点,我怎么能做一个查询: - 从 users_permission 获取所有结果;-获取权限的所有结果,但不包括users_permission中已经使用的结果(与users_id相关的结果)。
如果它与任何寄存器中的 users_permission 表相关,我通常可以排除它,但我想显示用户特定的权限。
总结一下,我应该如何使用 SQL 来获取特定用户的权限列表,以及链接 (users_permission) 和未链接 (permission) 权限?
解决方案
下面的这个查询解决了我的问题
SELECT
UP.users_id,
P.id as permission_id,
P.name as permission_name
FROM users_permission UP
LEFT JOIN permission P
on P.id = UP.permission_id
where UP.users_id = someUserId
UNION
SELECT
null,
P.id as permission_id,
P.name as permission_name
FROM permission P
where NOT EXISTS
(SELECT *
FROM users_permission
WHERE users_permission.permission_id = P.id
AND users_permission.users_id = someUserId)
推荐阅读
- react-native - 使用从 URL 中获取的数组显示在 flatList 中
- unit-testing - MSBuild 不在 Bin 目录中创建 DLL
- python - 如何仅根据 numpy 数组判断频道顺序?
- flutter - 小部件构建方法返回错误 - 此函数的返回类型为“小部件”,但不以返回语句结束
- python - 在匹配两个数据框具有的列中的值后,如何将数据框的列值作为新列放入另一个数据框?
- bash - 如何使用 bash 进行 http 请求?
- java - 报错 springboot version 2.3.8.RELEASE 调用init方法失败;嵌套异常是 java.lang.IncompatibleClassChangeError
- json - 在 SQL Server 2012 中使用 OPENJSON 解析 JSON
- ios - iPhone 与本地网络上的 Raspberry Pi 的 SSH 连接失败
- octave - 使用八度音阶的字母语音识别