2012-09-10 13 views
15

¿Por qué esta consulta genera un error de "entrada duplicada"?SELECCIONAR DISTINCT no funciona

TRUNCATE parim_firm_tag_names; 
INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona 
    FROM parim_marksona; 

mensaje de error:

SQL Error (1062): Duplicar entrada '1 - ??????? ?????? ' para la clave 'firm_tag_name_value'

Como se puede ver, firm_tag_name_value tiene un índice único, yo uso DISTINCT de selección y estoy truncar todos los datos existentes de tag_names.

¿Qué podría producir este error?

+0

¿Cuáles son las definiciones de ambas tablas? ¿Tal vez un efecto de las conversiones implícitas entre diferentes tipos de datos o diferentes opciones de sensibilidad de mayúsculas y minúsculas? –

+2

Supongo que tiene que ver con conjuntos de caracteres (colaciones) en 'parim_marksona.sona' contra' parim_firm_tag_names.firm_tag_name_value'. Los signos de interrogación en el mensaje de error sugieren que hay algunos caracteres no ingleses en los datos. –

+0

Proporcione la estructura de la tabla para ver el motivo exacto de este error. –

Respuesta

16

Esto podría estar ocurriendo debido a las distintas collations definido en ambas mesas parim_firm_tag_names y parim_marksona como las comparaciones de cadenas utilizando los resultados pueden distintas en diferentes valores en mayúsculas y minúsculas y mayúsculas y minúsculas collation valores.

Puede comprobar collation de columnas usando esta consulta:

SHOW FULL COLUMNS FROM parim_marksona; 
SHOW FULL COLUMNS FROM parim_firm_tag_names; 

Para evitar este error, puede convertir el cotejo de la columna sona a la intercalación de la columna firm_tag_name_value usando COLLATE, mientras que la selección de los valores distintos de la mesa parim_marksona .

Suponiendo cotejo de la columna firm_tag_name_value como latin1_swedish_cs:

TRUNCATE parim_firm_tag_names; 

INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona COLLATE latin1_swedish_cs 
    FROM parim_marksona; 

Esto debería funcionar sin errores.

Para obtener más información, consulte el manual Column Character Set and Collation.

+1

Sí, lo descubrí :) Eres el ganador :) – Kristian

1

¿Diferentes juegos de caracteres entre las dos tablas, quizás?

Cuestiones relacionadas