【问题标题】:insert data into tables where ids need to be equal将数据插入到 id 需要相等的表中
【发布时间】:2021-01-05 16:51:03
【问题描述】:

我有两个表,customer 和 order,每个表都有 2020 年的两条记录。带 ******* 星号的值是我想为 2021 财年添加的值。

客户:

ID FY Name
1 2020 Tina Smith
2 2020 Bobby Brown
134 2021 Tina Smith***
234 2021 Bobby Brown***

订购

ID 2digitFY Food Drink
1 20 Hot Dog Water
2 20 Burger Soda
134 21 Hot Dog Water***
234 21 Burger Soda ***

我想将与 2020/20 财年数据相同的记录添加到两个表中,只是带有 2021/21 年的新序列号上面加星标的数据。我无法弄清楚当它们自动生成时如何使新的 id 相等。下面是我设置的类似代码(上面使用的假数据)。

insert into customer (id, fy, name)
    select (id, '2021', name)
    from customer
    where fy = '2020'

insert into order (id, 2digitFY, food, drink)
    select (id, '21', food, drink)
    from order
    where 2digitFY = '20'

【问题讨论】:

    标签: sql oracle sql-insert


    【解决方案1】:

    我不知道在自动生成新 ID 时如何使它们相等。

    如果你所说的那些列是自动生成的主键,那么你无法控制它,Oracle 可以。

    我认为您所说的“自动生成”是指身份列,其值是自动生成的。如果是这样,请对其进行修改,使其使用GENERATED BY DEFAULT ON NULL 选项。这意味着 - 如果您不提供 ID 值,Oracle 将生成它。但是,如果您提供它,它的值将是您插入的值。

    同样,如果您使用的是 11g 或更低版本(其中不存在标识列)并通过数据库触发器创建了这些值,请确保它们仅在其值为 NULL 时触发并填充 ID 列。

    如果您这样做,那么您将能够创建自己的 ID 值并根据需要插入它们。

    【讨论】:

    • 我相信我们默认在 null 上生成它。就像在添加记录时一样,数据库会为其分配下一个未使用的值。我的问题是我无法弄清楚如何制作它,所以当我插入表格时,我想要一些方法来验证表格之间的记录仍然匹配,并在插入时在表格中有新的但相同的 id。恐怕 oracle 只会为它们分配不匹配的值,然后我们将无法找出与什么相关的内容。
    • 正如我所说:如果您提供 ID 值,Oracle 将不会生成它们。所以 - 计算这些 ID 并使用这些值插入行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多