You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JPA(HSQLDB):INSERT嵌套SELECT报unexpected token: SELECT错误

解决HSQLDB中关联表INSERT嵌套SELECT的语法错误问题

HSQLDB不支持在VALUES子句中嵌套SELECT语句获取值,这是你遇到unexpected token: SELECT错误的核心原因。必须改用INSERT...SELECT的语法直接从查询结果插入关联数据。

正确写法示例

单组角色-权限关联插入

INSERT INTO ROLE_AUTHORITY_MAPPING (ROLE_ID, AUTHORITY_ID)
SELECT r.ID, a.ID
FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a
WHERE r.ROLE_NAME = 'ADMIN' 
  AND a.AUTHORITY_NAME = 'USER_MANAGE';

多组角色-权限关联批量插入

如果需要一次性插入多组关联关系,可以用UNION ALL拼接多个查询:

INSERT INTO ROLE_AUTHORITY_MAPPING (ROLE_ID, AUTHORITY_ID)
-- 管理员拥有用户管理权限
SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a 
WHERE r.ROLE_NAME = 'ADMIN' AND a.AUTHORITY_NAME = 'USER_MANAGE'
UNION ALL
-- 管理员拥有帖子创建权限
SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a 
WHERE r.ROLE_NAME = 'ADMIN' AND a.AUTHORITY_NAME = 'POST_CREATE'
UNION ALL
-- 普通用户拥有帖子查看权限
SELECT r.ID, a.ID FROM SECURITY_ROLES r, SECURITY_AUTHORITIES a 
WHERE r.ROLE_NAME = 'USER' AND a.AUTHORITY_NAME = 'POST_VIEW';

关键说明

  • 确保SECURITY_ROLES和SECURITY_AUTHORITIES表中已经存在对应的初始化数据(通过之前的INSERT语句插入),否则SELECT会返回空结果,关联表不会插入数据。
  • 如果你的HSQLDB版本较低(低于2.0),建议升级到2.5+版本以获得更好的SQL语法兼容性。

内容的提问来源于stack exchange,提问作者joseluisbz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:07:11