首页 > 解决方案 > 将错误消息列值与查询中使用的列名匹配

问题描述

所以用查询:

ALTER TABLE table ADD PRIMARY KEY (id_0_col, id_1_col, text_01_col, text_02_col);

产生错误:

Error Code: 1062. Duplicate entry '11535-1013-FRA-TZN-MON-TON' for key 'PRIMARY'

在查询中使用了 4 列。这些列中的某些值带有连字符。mysql 产生的错误信息使用连字符来分隔列值。

您如何将错误消息中的值与查询中使用的列名进行匹配,以构建后续查询以查找违规行?

标签: mysql

解决方案


要查找有问题的行(重复行),您可以简单地使用GROUP BYwith HAVING。以下查询将获取与它们对应的多于一行的所有组合:

SELECT 
  id_0_col, id_1_col, text_01_col, text_02_col
FROM your_table_name 
GROUP BY id_0_col, id_1_col, text_01_col, text_02_col
HAVING COUNT(*) > 1 

现在,要获取所有这些行,您可以简单地将此查询包装在Derived Table中,然后重新加入以获取所有“违规行”:

SELECT 
  t.* 
FROM your_table_name AS t 
JOIN (
       SELECT 
         id_0_col, id_1_col, text_01_col, text_02_col
       FROM your_table_name 
       GROUP BY id_0_col, id_1_col, text_01_col, text_02_col
       HAVING COUNT(*) > 1 
     ) AS dt ON dt.id_0_col = t.id_0_col
                AND dt.id_1_col = t.id_1_col
                AND dt.text_01_col = t.text_01_col
                AND dt.text_02_col = t.text_02_col

推荐阅读