拾忆🍂拾忆🍂
  • cpp
  • MySQL
  • Oracle
  • PostgreSQL
  • MyBatis
  • API升级
  • HMOS
  • 百变小组件
  • hdc
  • 元服务
  • Java
  • MinIO
  • Stream
  • JSP & Struts2
  • Spring
  • FFmpeg
  • Linux
  • Git
  • Nginx
  • Ollama
  • Adobe Audition
  • Aseprite
  • Excel
  • Markdown基本用法
  • MuseScore 4.x
  • UVR
  • Windows
  • emoji-cheat-sheet
  • IDE快捷键
  • obs-studio
  • YOLO
  • Python
  • VuePress 2.x
  • 内置组件
  • markdown-container
  • markdown-ext
  • markdown-hint
  • markdown-preview
  • markdown-tab
  • Markdown扩展语法
  • 插件配置
  • prismjs
  • 样式
  • CSS
  • JS
  • TS
  • Vue3
主页
梦的开始🌅
  • cpp
  • MySQL
  • Oracle
  • PostgreSQL
  • MyBatis
  • API升级
  • HMOS
  • 百变小组件
  • hdc
  • 元服务
  • Java
  • MinIO
  • Stream
  • JSP & Struts2
  • Spring
  • FFmpeg
  • Linux
  • Git
  • Nginx
  • Ollama
  • Adobe Audition
  • Aseprite
  • Excel
  • Markdown基本用法
  • MuseScore 4.x
  • UVR
  • Windows
  • emoji-cheat-sheet
  • IDE快捷键
  • obs-studio
  • YOLO
  • Python
  • VuePress 2.x
  • 内置组件
  • markdown-container
  • markdown-ext
  • markdown-hint
  • markdown-preview
  • markdown-tab
  • Markdown扩展语法
  • 插件配置
  • prismjs
  • 样式
  • CSS
  • JS
  • TS
  • Vue3
主页
梦的开始🌅
  • 「从开始,到永久」
  • C艹

    • cpp
  • Database

    • MySQL
    • Oracle
    • PostgreSQL
    • MyBatis
  • HarmonyOS

    • API升级
    • HMOS
    • 百变小组件
    • hdc
    • 元服务
  • Java

    • Java
    • MinIO
    • Stream
    • JSP & Struts2
    • Spring
  • Linux

    • FFmpeg
    • Linux
    • Git
    • Nginx
  • LLM

    • Ollama
  • Others

    • Adobe Audition
    • Aseprite
    • Excel
    • Markdown基本用法
    • MuseScore 4.x
    • UVR
    • Windows
    • emoji-cheat-sheet
    • IDE快捷键
    • obs-studio
    • YOLO
  • Python

    • Python
  • VuePress

    • VuePress 2.x
    • 内置组件
    • markdown-container
    • markdown-ext
    • markdown-hint
    • markdown-preview
    • markdown-tab
    • Markdown扩展语法
    • 插件配置
    • prismjs
    • 样式
  • Web

    • CSS
    • JS
    • TS
    • Vue3
  • 主页

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);
  1. setval() 函数:
    • 这是 PostgreSQL 中用于设置序列(sequence)当前值的函数。
    • 序列是 PostgreSQL 中用于自动生成唯一标识符(通常是自增 ID)的对象。
  2. 函数参数:
    • 第一个参数 '"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;
    
最近更新: 2025/11/4 16:13
Contributors: Enlin
Prev
Oracle
Next
MyBatis