当前位置: 首页 > 面试题库 >

PostgreSQL在单个查询中更新多个表

姚实
2023-03-14
问题内容

我有2张桌子,如下所示:

  1. serial_table

    id CHARACTER VARYING(20),
    

    serial_key CHARACTER VARYING(20),
    PRIMARY KEY(id, serial_key)

  2. 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)

现在我想更新,serial_rate.rateserial_table.serial_key从单个SQL查询,如:

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');

我知道这是不正确的。 有一种可能的方法 因为我想使用该语句PreparedStatement在Java中创建一个?

编辑
这个问题不在PreparedStatementsJava中。它是关于SQL语法的,我希望在创建SQL时将其作为参数传递PreparedStatement
我不想要任何答案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'
        ;


 类似资料:
  • 问题内容: 我基本上只是试图更新表中的多个值。最好的方法是什么?这是当前代码: 我要包含的另一个更新是: 谢谢! 问题答案: 用逗号分隔添加多列: 但是,您没有在清理输入内容??这意味着任何随机的黑客都可能破坏您的数据库。看到这个问题:用PHP清理用户输入的最佳方法是什么? 另外,样式是数字还是字符串?我假设一个字符串,所以需要用引号引起来。

  • 问题内容: 我处于必须更新数据库中约12,000个项目的情况。每行都需要镜像我之前制作的一个excel文件。我已经创建了创建SQL语句每一行的文件,但是不确定是否可以在单个查询中运行每一行。 这是我正在尝试做的一个例子。 这项工作有效吗,或者我要实现的目标还有更好的选择吗? 每个项目将具有唯一值,并且要更改的列也将具有唯一值。我看不到如何通过循环或到目前为止找到的任何其他方法来实现此目的。我意识到

  • 问题内容: 我有这3张表。 我创建了用于创建订单的表单,其中填写了订单(日期)的信息以及完成订单的人。在我的表单中,有一个表格可供我选择员工并获取其ID。我想知道是否可以通过一个查询将表Order和completelyBy插入表中。 使用两个插入内容或使用答案中的代码之间在有效性上有什么区别吗? 问题答案: 这可以使用修改公共表表达式的数据来完成: 第一部分插入表中并返回插入的ID。然后,第二部分

  • 问题内容: 我看到这对笨论坛 考虑以下代码 这显然是您在Codeigniter中这样做的方式 实际上这是行不通的。我看了一下生成的SQL,结果甚至没有提到联接。 有谁知道如何使用Codeigniter的Active Record数据库类对联接进行更新? 问题答案: 我发现的一种解决方案是完全删除联接并将联接条件移到“ where”函数中,此外,您还需要更改更新字符串以包括新表。

  • 我有一张像下面这样的桌子, ID姓名电子邮件性别 这个表中已经有了一些值。 现在,我用下面的查询来添加年龄。 alter table tblPerson add Age int 现在,我的行结构看起来像 ID姓名电子邮件性别年龄 现在,我有了年龄表。有任何查询可以将这些年龄添加到新创建的列中吗? 所有年龄都是根据ID排序的。因此,如果需要逻辑,则不需要。我只需要添加列数据。 谢谢

  • 问题内容: 使用上面的代码,数据库kuis中表Writers的第三行值将使用new_value更新,并且输出将为 Number od rows更新:1 我应该如何同时更新多行? 问题答案: 可能您正在寻找cursor.executemany。