【问题标题】:Update fails with duplicate row更新因重复行而失败
【发布时间】:2013-09-17 05:02:21
【问题描述】:

我正在用我继承的一个小型数据库自学 SQL。当我在玩 Update() 时,

update a
from sls_ord_fact a, sls_ord_dim b
set cust_acct_key = b.cust_acct_key
where a.sls_ord_key = b.sls_ord_key
and a.sls_ord_key <> 0
and b.cust_acct_key <> 0
and a.cust_acct_key <> b.cust_acct_key;

我触发了这个错误:Duplicate row error in SLS_ORD_FACT

如何识别重复记录???我对数据不是很了解.....

【问题讨论】:

  • Teradata v10 是数据库。 DBA 为像我这样的 SQL 新手创建了一个沙盒模式。
  • 可以分享一下表定义或者主索引定义吗?

标签: sql teradata


【解决方案1】:

您似乎正在尝试设置SLS_ORD_FACT 表的主键(大概是cust_acct_key),并且您尝试将其设置为的新值已经存在于表中。由于主键必须是唯一的,这会导致错误。重复键在b——实际上是b.cust_acct_key,可能是SLS_ORD_FACT.cust_acct_key的外键。

【讨论】:

  • 你说的有道理,但我试图找到像 select a.cust_acct_key,b.cust_acct_key from sls_ord_fact a, sls_ord_dim b where a.sls_ord_key = b.sls_ord_key and a.sls_ord_key &lt;&gt; 0 and b.cust_acct_key &lt;&gt; 0 and a.cust_acct_key &lt;&gt; b.cust_acct_key 这样的重复行并找到零匹配。所有的键都不一样。我错过了什么?
  • 这次尝试在 sls order dim 表中给了我更多的键,这些键具有重复计数SELECT distinct b.cust_acct_key, COUNT(*) FROM sls_ord_dim b WHERE b.cust_acct_key &lt;&gt; 0 GROUP BY b.cust_acct_key HAVING COUNT(*) &gt; 1
猜你喜欢
  • 1970-01-01
  • 2017-09-16
  • 2012-07-05
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多