标签: merge-statement

每行或每个语句的MERGE语句唯一索引/约束验证?

假设我有以下具有以下约束的表:

create table test as (
    select 1 as id, 'a' as name from dual 
    union all 
    select 2, 'b' from dual 
    union all 
    select 3, 'c' from dual
);

create unique index ind on test(name);

alter table test add constraint constr unique (name);

select * from test;

        ID NAME
---------- ----
         1 a   
         2 b   
         3 c   
Run Code Online (Sandbox Code Playgroud)

现在假设我执行以下操作MERGE:

merge into test t using (
    select 4 as id, 'b' as name from dual 
    union all 
    select 2 …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g merge-statement

6
推荐指数
1
解决办法
4550
查看次数

SQL Server MERGE语句和ORDER BY子句

我想写一个MERGE语句,通过使用ORDER BY子句从一个大表中选择TOP 10行,并更新它的一个列值.MERGE语句允许我选择TOP 10行,但我无法将ORDER BY子句放在任何地方.

MERGE TOP(10) StudentAllocation AS SA
USING (SELECT @sub_id AS subId) AS TSA ON SA.sub_id = TSA.subId
WHEN MATCHED THEN 
       UPDATE SET SA.exam_batch = 1);
Run Code Online (Sandbox Code Playgroud)

sql-server sql-order-by merge-statement

5
推荐指数
1
解决办法
6967
查看次数

Oracle SQL合并语句只有1个表和一堆值

我正在使用Spring JDBC和oracle SQL.

使用SpringJDBC类MapSqlParameterSource,我已经映射了我想要合并的数据.

现在我想使用merge语句来更新/插入数据库表.我只有一个表和一堆我想要合并到它的参数.

 merge into proj.person_registry pr
using ( ! parameters should go here somehow? )
on (pr.id = :id or pr.code = :code)
when matched then 
update set pr.code             = :code,
        pr.name                 = :name,
        pr.firstname            = :firstname,
        pr.cl_gender            = :cl_gender,
        pr.cl_status            = :cl_status,
        pr.aadress              = :aadress,
        pr.aadress_date         = :aadress_date 
when not matched then
insert values (:code, :name, :firstname, :cl_gender, :cl_status, ;aadress, :aadress_date);
Run Code Online (Sandbox Code Playgroud)

我是否必须以某种方式为using 关键字创建临时表,还是有另一种方式?我怎么会这样合并呢?

pr.id和pr.code也有两个唯一的键.有时参数:idnull,当发生这种情况时,我想根据pr.code匹配到:code来到达update语句.如果我的更新包含该行,它仍然可以工作:

update set pr.code             = :code,
Run Code Online (Sandbox Code Playgroud)

sql oracle spring merge-statement

5
推荐指数
1
解决办法
7108
查看次数

在合并语句中比较 Null 与 Null

在处理数十亿条记录以比较合并语句中的 NULL 时,哪种语句是完美或更好的。我尝试过 SET ANSI_NULLS OFF 但这在合并语句中不起作用。这是我的两种方法

ISNULL(SRCColumn,-11111) = ISNULL(DSTColumn, -11111)
Run Code Online (Sandbox Code Playgroud)

或者

SRCColumn = DSTColumn OR (SRCColumn  IS NULL AND DSTColumn  IS NULL)
Run Code Online (Sandbox Code Playgroud)

请告诉我是否有更好的方法来处理。因为我有大约 15 列需要比较。

isnull sql-server-2008-r2 merge-statement

5
推荐指数
1
解决办法
4499
查看次数

合并语句的 BigQuery 等效项

我正在执行从 Teradata 到 Big query 的迁移。我遇到过在 USING 子句中包含 VALUES 的合并语句。

MERGE INTO department DL
                        USING VALUES
                        (
                        2,'ABC'
                        ) AS V 
                        (Run_Id, Country) 
                          ON DL.department_id = V.Run_Id
                        WHEN MATCHED THEN
                          UPDATE SET 
                            department_description = V.country
                        WHEN NOT MATCHED THEN
                          INSERT
                          (
                          V.Run_Id
                          , V.Country
                          curr
                          ); 
Run Code Online (Sandbox Code Playgroud)

谁能帮我找到它的 BigQuery 等效项。

merge-statement google-bigquery bigquery-udf

4
推荐指数
1
解决办法
9806
查看次数

当ora_rowscn在USING子句中时,Oracle Merge语句行为

我有一个MERGE语句,它给了我可怕的ORA-00904: invalid identifier错误消息.请注意,此处不存在"无效标识符"错误的典型问题 - 我没有尝试更新已加入的列,也没有拼错我的列名.我正在尝试使用Oracle伪列ORA_ROWSCNUSING条款的SELECT说法.

使用这些示例表,我尝试运行

MERGE INTO MY_MERGE_TABLE D
  USING
 (SELECT PRIMARY_KEY, 
         COALESCE (UPDATE_DT, CREATED_DT) update_dt,
         ORA_ROWSCN AS rowscn 
    FROM MY_SOURCE_TABLE) S
   ON (D.PRIMARY_KEY = S.PRIMARY_KEY)
WHEN MATCHED THEN
     UPDATE SET D.update_dt = GREATEST(D.update_dt, S.update_dt),
                D.rowscn = GREATEST(D.rowscn, S.rowscn)
WHEN NOT MATCHED THEN
     INSERT (D.PRIMARY_KEY, D.UPDATE_DT, D.ROWSCN)
     VALUES (S.PRIMARY_KEY, S.UPDATE_DT, S.ROWSCN);
Run Code Online (Sandbox Code Playgroud)

如果我从USING子句中删除伪列ora_rowscn,我不再收到错误消息,并且合并成功完成.

MERGE INTO MY_MERGE_TABLE D
  USING
 (SELECT PRIMARY_KEY, 
         COALESCE (UPDATE_DT, CREATED_DT) update_dt
    FROM MY_SOURCE_TABLE) S
   ON (D.PRIMARY_KEY = …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g merge-statement

3
推荐指数
1
解决办法
1301
查看次数

如何为删除的SQL Server Merge语句添加where条件

MERGE  DestinationTable AS D 
USING @SourceTable AS S
ON D.Alternate_ID = S._ID

WHEN MATCHED AND
(
       D.Candidate_ID <> S.Candidate_ID  OR  ISNULL(D.Vacancy_ID,'') <> S.Vacancy_ID   
)
THEN
UPDATE SET  
    D.FName = S.FName,
    D.Department = S.Department,

WHEN NOT MATCHED BY TARGET
THEN INSERT  
(
    Alternate_ID,
    FName,
    Department
 ) 
  VALUES 
  (
    S.ID,
    S.FName,
    S.Department  
  ) 
 WHEN NOT MATCHED BY SOURCE
 --How to add a where clause to the delete statement here
 THEN  DELETE; --E.g WHERE  D.Department <> 'HR'
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的合并声明删除DestinationTable中的记录,如果它们已从源中删除

有没有人知道如何将一个WHERE条件添加到Delete语句?我想只从目标中删除,其中ColA等于特定的常量字符串.

sql t-sql sql-server merge-statement

3
推荐指数
1
解决办法
8497
查看次数