决赛桌的合并相当于什么?

2023-12-02

我正在尝试使用合并来仅插入新记录。我想收集插入的新记录的 ID 以及被忽略的重复记录的 ID。

这是表的创建语句:

drop table SSZ_ME_MIS.test_update_table;
create table ssz_me_mis.test_update_table (
    ID_col int not null generated always as identity, -- Primary Key
    val_col_1 int not null,
    val_col_2 varchar(255) not null,
    constraint pk_test_update_table primary key (ID_col),
    constraint uq_test_update_table unique (val_col_1, val_col_2)
);

然后,填充一些初始值:

insert into ssz_me_mis.test_update_table (val_col_1, val_col_2)
select *
from (values 
    (231, 'Value 1'),
    (481, 'Value 2'),
    (813, 'Value 3')
);

所以,最后,我想尝试进行这种插入:

select ID_col from final table (
    merge into ssz_me_mis.test_update_table t using (
        select *
        from (values 
            (231, 'Value 1'),
            (481, 'Value 2'),
            (513, 'Value 4')
        )
    ) as s (val_col_1, val_col_2)
    on
        t.val_col_1 = s.val_col_1
        and t.val_col_2 = s.val_col_2
    when not matched then 
        insert (val_col_1, val_col_2)
        values (s.val_col_1, s.val_col_2)
    else
        ignore
);

有什么办法可以做到这一点吗?


像这样的东西将在 Db2 LUW 上运行(假设您正在使用ORGANIZE BY ROW表)。

with s (val_col_1, val_col_2) AS  (values 
            (231, 'Value 1'),
            (481, 'Value 2'),
            (513, 'Value 4')
        )
, i as (select * from final table(
    INSERT INTO ssz_me_mis.test_update_table ( val_col_1 , val_col_2) 
     select * from s where not exists (select 1 from ssz_me_mis.test_update_table t
        where 
        t.val_col_1 = s.val_col_1
        and t.val_col_2 = s.val_col_2
        )
))
, u as (select count(*) as dummy from new table(
    update ssz_me_mis.test_update_table t
    set val_col_1 = (select val_col_1 from s where t.val_col_1 = s.val_col_1 and t.val_col_2 = s.val_col_2)
    ,   val_col_2 = (select val_col_2 from s where t.val_col_1 = s.val_col_1 and t.val_col_2 = s.val_col_2)
    where exists    (select val_col_2 from s where t.val_col_1 = s.val_col_1 and t.val_col_2 = s.val_col_2)
))
select ID_col from i, u

我包含了一个用于更新的分支,但从逻辑上讲,您需要一些非关键列才能有意义。你的例子只是实践中的插入,所以我有点困惑你为什么使用MERGE at all.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决赛桌的合并相当于什么? 的相关文章

  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • SQL。 SP 或函数应计算周五的下一个日期

    我需要编写一个存储过程来返回给定日期的下周五日期 例如 如果日期是 05 12 2011 那么它应该返回下周五日期 05 13 2011 如果您通过 05 16 2011 那么它应该返回日期是 5 20 2011 星期五 如果您将星期五作为
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我
  • SQL Android 错误:没有这样的表

    因此 每次我在位于 AddContacts 类中的 EditText 字段中输入数据时 我的对话框都会显示我已成功添加信息 但在日志 cat 中却显示没有这样的表 contactsTable 我认为错误出在我的数据库类中的 onCreate
  • 主键默认可以为NULL吗?为什么这样描述呢?

    我有一张桌子 当我describe这是 mysql gt DESC my table Field Type Null Key Default Extra contact id int 11 NO PRI NULL auto incremen
  • 从java运行sqlplus脚本的简单方法

    我有包含 sqlplus 特定脚本的 sql 文件 它包括 或 作为语句终止符 执行存储过程的 EXEC 等 我需要从 java jdbc 执行此脚本 而不需要 sqlplus sql ant任务 maven sql插件无法处理不同的终止符
  • 如何创建包含多列MD5的GENERATED列?

    我尝试在 PostgreSQL 14 3 中添加下表 CREATE TABLE client cache id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY request VARCHAR
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 将逗号分隔的主数据替换为列中的描述

    有 2 个 SQL Server 表 Products Name Status Code Product 1 1001 1003 Product 2 1001 1005 1006 Status Code Description 1001 S
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U
  • 火鸟删除速度很慢

    我正在做这个简单的交易 DELETE FROM ominve01 WHERE CVE OBS IN SELECT CVE OBS FROM minve01 M WHERE M FECHA DOCU lt 31 12 2010 OR FECH
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • 获取从开始日期到结束日期的活跃周数

    我的订阅数据如下所示 数据显示用户何时购买订阅 它有user id subscription id start date and end date 我已经得出wk start and wk end从中 user subscription i
  • 如何选择列值不不同的每一行

    我需要运行一个 select 语句 返回列值不不同的所有行 例如 EmailAddress 例如 如果表格如下所示 CustomerName EmailAddress Aaron email protected cdn cgi l emai
  • 更高效的 LINQ 查询

    有人可以帮我将此查询循环变成高效的 Linq 查询吗 我将其加载到 TreeView 中 因此必须附加每个项目 包含也非常低效 延迟加载项目也不起作用 事实上 这个查询访问数据库的次数比应有的要多 public IQueryable
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • parent_id 是外键(自引用)并且为 null?

    浏览 Bill Karwin 的书 SQL Antipatterns 第 3 章 Naive Trees 邻接表 父子关系 有一个注释表的示例 CREATE TABLE Comments comment id SERIAL PRIMARY
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐