我有2张 table ,如下所示:

  • serial_table
    id CHARACTER VARYING(20),
    serial_key CHARACTER VARYING(20),
    PRIMARY KEY(id, serial_key)
    
  • serial_rate:
    id CHARACTER VARYING(20),
    serial_key CHARACTER VARYING(20),
    rate NUMERIC,
    PRIMARY KEY(id, serial_key),
    FOREIGN KEY (id, serial_key) REFERENCES serial_table(id, serial_key)
    

  • 现在,我想通过单个SQL查询更新serial_rate.rateserial_table.serial_key:
    UPDATE inventory.serial_table AS s
    JOIN inventory.serial_rate AS r
    ON (s.id, s.serial_key) = (r.id, r.serial_key)
    SET s.serial_key = '0002', r.rate = 22.53
    WHERE (s.id, s.serial_key) = ('01', '002');
    

    我知道这是不正确的。 我可以使用该语句在Java中创建PreparedStatement吗?有没有一种方法可以做到这一点?

    编辑
    这个问题与Java中的PreparedStatements无关,而与我希望在创建PreparedStatement时作为参数传递的SQL语法有关。 我不想要有关PreparedStatement 的任何答案。

    最佳答案

    这是CTE的事情(但是我不知道如何将其包装到准备好的Java东西中)

    WITH src AS (
            UPDATE serial_rate
            SET rate = 22.53, serial_key = '0002'
            WHERE serial_key = '002' AND id = '01'
            RETURNING *
            )
    UPDATE serial_table dst
    SET serial_key = src.serial_key
    FROM src
    -- WHERE dst.id = src.id AND dst.serial_key  = '002'
    WHERE dst.id = '01' AND dst.serial_key  = '002'
            ;
    

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

    10-12 23:40