如何查找违反唯一键约束的记录?

Cha*_*nna 7 sql oracle

假设我有两个表如下,

表A.

    +-------+-------+-------+-------+
    | col_a | col_b | col_c | col_d |
    +-------+-------+-------+-------+
    |       |       |       |       |
    +-------+-------+-------+-------+
Run Code Online (Sandbox Code Playgroud)

表B.

    +-------+-------+-------+-------+
    | col_a | col_b | col_c | col_d |
    +-------+-------+-------+-------+
    |       |       |       |       |
    +-------+-------+-------+-------+
Run Code Online (Sandbox Code Playgroud)

我将使用表B更新表A.以下是条件

  1. 等于的记录col_a应在表A中更新
  2. 记录不等于col_a应插入表A
  3. 表A具有唯一的键约束(col_b,col_c,col_d)

问题是当更新表A中的数据时,对于某些记录,此唯一键约束失败.问题是如何使用查询识别违反唯一键约束的记录.(我无权访问日志)

Gle*_*enn 11

如果你没有一个唯一的关键col_b, col_c, col_dtable_b,这将在复制时导致冲突.您可以使用如下查询识别有问题的行:

SELECT col_b, col_c, col_d
  FROM table_b
  GROUP BY col_b, col_c, col_d
  HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

可以在table_ajoin to 上运行类似的查询table_b,但要运行的特定查询将取决于将更新哪些列table_a.对于插入案例,一种有用的技术可能是使用MINUSbetween table_a和建议的插入行.