【问题标题】:Insert with select posgresql使用选择 postgresql 插入
【发布时间】:2020-08-31 11:51:32
【问题描述】:

我想在我的应用中插入新角色,但仅限于几个用户。我可以通过 select 语句获取他们所有的 id。

所以他们所有人的角色都是'COOL_ROLE'

account_role 的角色看起来像

+------------+-------+
| account_id | roles |
+------------+-------+

我的语句应该只插入许多具有相同角色的 id 我试过了

INSERT INTO accout_role (accout_id, roles)
VALUES((SELECT..),'COOL_ROLE')

但我收到错误org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [21000]: ERROR: more than one row returned by a subquery used as a expression

当我删除表达式中的 () 时

INSERT INTO accout_role (accout_id, roles)
VALUES(SELECT..,'COOL_ROLE')

我得到 org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [42601]: ERROR: syntax error at or near "select"

如何插入多个具有相同角色的 id?

【问题讨论】:

  • 不要使用VALUES。您可以将SELECT 的输出直接用作INSERT 的源,根据需要添加新列。
  • 直接使用SELECTVALUES 仅用于显式指定值

标签: sql postgresql


【解决方案1】:

使用insert into ... select:

insert into account_role (accout_id, roles)
select id, 'COOL_ROLE'
from account
where ...

【讨论】:

  • select语句好复杂!我已经离开加入它和许多地方
  • @СеменНемытов 没关系,这仍然有效
【解决方案2】:

删除values:

INSERT INTO account_role (account_id, roles)
    SELECT account_id, 'COOL_ROLE'
    FROM . . . ;

【讨论】:

  • select语句好复杂!我已经离开加入它和许多地方
  • @СеменНемытов 。 . .这是同一个问题,但更简单,因为您没有values
猜你喜欢
  • 2011-08-30
  • 2012-10-12
  • 1970-01-01
  • 2013-10-10
  • 2016-06-26
  • 1970-01-01
  • 2021-12-03
  • 2018-09-06
相关资源
最近更新 更多