sql - 使用一个 SQL 查询更新 PostgreSQL 表

标签 sql postgresql postgresql-9.3 postgresql-9.2 postgresql-9.4

我有这两个表,我想用一个使用 Java 代码的 SQL 查询来更新它们:

CREATE TABLE ACCOUNT(
 ID INTEGER NOT NULL,
 USER_NAME TEXT NOT NULL,
 PASSWD TEXT,
 FIRST_NAME TEXT,
 LAST_NAME TEXT,
 E_MAIL TEXT NOT NULL,
 COUNTRY TEXT,
 STATE TEXT,
 LAST_PASSWD_RESET DATE,
 DESCRIPTION TEXT,
 LAST_UPDATED DATE,
 CREATED DATE
)
;

-- ADD KEYS FOR TABLE ACCOUNT

ALTER TABLE ACCOUNT ADD CONSTRAINT KEY1 PRIMARY KEY (ID)
;

ALTER TABLE ACCOUNT ADD CONSTRAINT USER_NAME UNIQUE (USER_NAME)
;

ALTER TABLE ACCOUNT ADD CONSTRAINT E_MAIL UNIQUE (E_MAIL)
;

-- TABLE ACCOUNT_ROLE

CREATE TABLE ACCOUNT_ROLE(
 ID INTEGER NOT NULL,
 USER_NAME TEXT NOT NULL,
 ROLE INTEGER,
 PERMISSION TEXT,
 LAST_UPDATED DATE,
 CREATED DATE
)
;

-- CREATE INDEXES FOR TABLE ACCOUNT_ROLE

CREATE INDEX IX_RELATIONSHIP19 ON ACCOUNT_ROLE (ID)
;

-- ADD KEYS FOR TABLE ACCOUNT_ROLE

ALTER TABLE ACCOUNT_ROLE ADD CONSTRAINT KEY26 PRIMARY KEY (ID)
;

ALTER TABLE ACCOUNT_ROLE ADD CONSTRAINT RELATIONSHIP19 FOREIGN KEY (ID) REFERENCES ACCOUNT (ID) ON DELETE CASCADE ON UPDATE CASCADE
;

我使用此 SQL 查询来更新第一个表数据。对于第二个表,我使用类似的 SQL 查询:

UPDATE ACCOUNT SET ID = ?, USER_NAME = ?, PASSWD = ?, FIRST_NAME = ?, LAST_NAME = ?, E_MAIL = ?, COUNTRY = ?, STATE = ?, " CITY = ?, ADDRESS = ?, STATUS = ?, SECURITY_QUESTION = ?, SECURITY_ANSWER = ?, DESCRIPTION = ?, LAST_UPDATED = CURRENT_DATE WHERE ID = ?

如何解决这个问题?

最佳答案

在 Postgres 中,您可以使用 CTE 更新两个表:

with t1 as (
      update . . .
      returning *
     )
update t2
    . . .

目前还不清楚这如何适合您正在尝试做的事情。但是可以在 Postgres 中编写一条语句来执行两次更新。

关于sql - 使用一个 SQL 查询更新 PostgreSQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731440/

相关文章:

sql - 从两个不同的选择语句中获取两行

mysql - MySql 中的嵌套选择查询

mysql - 检查时间重叠表?

mysql - 在 SQL 中计算百分比

sql - mysql 索引的基本优化

sql - 努力加入3张 table 的新手

sql - 如何编写可以给出以下结果的SQL?

sql - 需要更改整个列的日期格式

postgresql - 整数列可以为空吗?

sql - 分割给定字符串并准备 case 语句