2012-09-10 36 views
15

Tại sao truy vấn này tạo ra lỗi "Mục nhập trùng lặp"?CHỌN DISTINCT không hoạt động

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

Thông báo lỗi:

Lỗi SQL (1062): Duplicate entry '1 - ??????? ?????? ' cho khóa 'firm_tag_name_value'

Như bạn thấy, firm_tag_name_value có một chỉ số duy nhất, tôi sử dụng DISTINCT chọn và tôi cắt bỏ tất cả các dữ liệu hiện có từ tag_names.

Điều gì có thể tạo ra lỗi này?

+0

Các định nghĩa của cả hai bảng là gì? Có thể ảnh hưởng của chuyển đổi tiềm ẩn giữa các kiểu dữ liệu khác nhau hoặc các tùy chọn độ nhạy trường hợp khác nhau? –

+2

Tôi đoán nó phải làm với bộ ký tự (collations) trong 'parim_marksona.sona' vs' parim_firm_tag_names.firm_tag_name_value'. Các dấu hỏi trong thông báo lỗi cho thấy có một số ký tự không phải tiếng Anh trong dữ liệu. –

+0

Vui lòng cung cấp cấu trúc bảng để xem lý do chính xác cho lỗi này. –

Trả lời

16

này có thể xảy ra do khác nhau collations xác định trên cả hai bảng parim_firm_tag_namesparim_marksona như so sánh chuỗi sử dụng kết quả có thể khác biệt trong giá trị khác nhau về trường hợp nhạy cảm và phân biệt dạng chữ collation giá trị.

Bạn có thể kiểm tra collation cột sử dụng truy vấn này:

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

Để tránh lỗi này, bạn có thể chuyển đổi collation của cột sona để collation của cột firm_tag_name_value sử dụng COLLATE, trong khi lựa chọn các giá trị khác biệt với bảng parim_marksona .

Giả sử collation của cột firm_tag_name_value như 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; 

này nên làm việc mà không có lỗi.

Để biết thêm chi tiết, hãy tham khảo hướng dẫn sử dụng Column Character Set and Collation.

+1

Vâng, chỉ cần tìm ra điều đó :) Bạn là người chiến thắng :) – Kristian

1

Các bộ ký tự khác nhau giữa hai bảng, có lẽ?

Các vấn đề liên quan