** +++ 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 |
复合键不应该允许欺骗,对吗?如何获取主键的唯一值?我在这里错过了什么吗?
答案 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
创建多个记录。