重复的输入错误,但有欺骗

时间:2018-01-25 12:38:23

标签: mysql sql duplicates

** +++ UPDATE +++

我刚刚发现另一个脚本中有相同的insert语句。这就是导致此错误的原因。

+++ +++ UPDATE **

插入因此创建的临时表时出现错误

CREATE TEMPORARY TABLE IF NOT EXISTS stage_package_dim (
`account_key` BIGINT(20) NOT NULL,
`processdate_est_key` INT(11) NOT NULL,
`package_id` INT(11) NOT NULL,
`package_name` VARCHAR(255) NULL DEFAULT NULL,
`package_description` VARCHAR(255) NULL DEFAULT NULL,
`package_type` VARCHAR(255) NULL DEFAULT NULL,
`package_order` INT(11) NULL DEFAULT '1',
`package_cost` DECIMAL(16,4) NULL DEFAULT '0.0000',
`package_credits` DECIMAL(16,4) NULL DEFAULT '0.0000',
PRIMARY KEY (`account_key`, `processdate_est_key`, `package_id`),
INDEX `package_type` (`package_type`)

);

错误读取

Duplicate entry '1000000000000000001-1368576000-6001' for key 'PRIMARY'

所以我试图找到我的复合键的欺骗但我不认为我的查询是正确的

SELECT
 account_key,COUNT(distinct processdate_est_key,package_id)
 FROM  staging_package_dim
GROUP BY account_key
HAVING COUNT(account_key) >1 order by 1 limit 10

但它给了我以下结果

+---------------------+--------------------+
| account_key | COUNT(account_key) |
+---------------------+--------------------+
| 1000000000000001001 | 1473 |
| 1000000000000002001 | 623 |
| 1000000000000003001 | 745 |

复合键不应该允许欺骗,对吗?如何获取主键的唯一值?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:3)

用于证明表中没有重复项的查询是:

select account_key, processdate_est_key, package_id
from staging_package_dim
group by account_key, processdate_est_key, package_id
having count(*) > 1;

这不会返回任何行,因为account_key + processdate_est_key + package_id是表格的主键。

您的查询错误,因为仅account_key不是表格的主键。允许在表中为同一account_key创建多个记录。