VALUES
这是查询一个后端给的组织架构id集合中是否有子部门的查询语句
SELECT
id,
CASE
WHEN EXISTS (SELECT true FROM t_sys_organization WHERE c_parent_id = id and c_deleted = false ) THEN true
ELSE false
END AS has_children
FROM
(SELECT 5 AS id
UNION ALL SELECT 7
UNION ALL SELECT 161
UNION ALL SELECT 162
UNION ALL SELECT 163
UNION ALL SELECT 164
)
在上方的 FROM 后面使用 UNION ALL 组成了一个虚拟表,表中有一个字段 id ,然后是 id 列表值。在PostgreSQL中可以使用 VALUES 关键字来构建虚拟表:
SELECT temp_id AS id FROM (VALUES (5), (7), (161), (162), (163), (164)) AS ids_table(temp_id)
SELECT temp_id: 查询temp_id列;AS ids_table(temp_id):ids_table-表别名,temp_id-字段别名,对应上面的查询temp_id列,外部查询可以使用ids_table.temp_id来访问这个虚拟表的列。在本实例中,这个改为name,SELECT也对应改为SELECT name;VALUES后面括号内有多个值的情况下,字段别名之间使用逗号隔开;
自增序列
加入有表的id使用了自增序列,在你强制insert之后,需要更改自增序列下一次的值,可以使用:
SELECT setval('"public"."t_sys_dict_type_c_id_seq1"', 5, true);
setval()函数:- 这是 PostgreSQL 中用于设置序列(sequence)当前值的函数。
- 序列是 PostgreSQL 中用于自动生成唯一标识符(通常是自增 ID)的对象。
- 函数参数:
- 第一个参数
'"public"."t_sys_dict_type_c_id_seq1"':- 这是序列的完整名称,使用了双引号以确保大小写和特殊字符被正确识别。
public是模式(schema)名,类似于命名空间。t_sys_dict_type_c_id_seq1是序列本身的名称。PostgreSQL 通常会为串行(SERIAL)或标识(GENERATED AS IDENTITY)列自动创建名为表名_列名_seq的序列。
- 第二个参数
5:- 这是要设置的目标值。函数执行后,序列的“下一个值”将会是这个数字。
- 第三个参数
true:- 这是一个布尔值,表示是否“立刻递增”。
true(或is_called = true):表示将序列的last_value设置为 5,并且下一个nextval()调用将返回6(5 + 1)。这是最常见和符合直觉的用法。false(或is_called = false):表示将序列的last_value设置为 5,并且下一个nextval()调用将返回5。
- 第一个参数
查看序列的当前值:
SELECT last_value FROM public.t_sys_dict_type_c_id_seq1;
自增 id 强制 insert
关键点:OVERRIDING SYSTEM VALUE
INSERT INTO "public"."t_sys_user" (id, 字段1, 字段2, 字段3, ...)
OVERRIDING SYSTEM VALUE
VALUES (1, 值1, 值2, 值3, ...);
使用 RETURNING 子句获取插入结果
INSERT INTO "public"."t_sys_dict_type" (id, dict_name, dict_type, status) OVERRIDING SYSTEM VALUE VALUES (1001, '用户状态', 'sys_user_status', 1) RETURNING id, dict_name;
