2013-04-24 28 views
6

Tôi làm việc trên tập dữ liệu với ba cột khác nhau: pile, positioninfo.Tìm bản sao cho kết hợp hai cột trong cơ sở dữ liệu MySQL

Không có bản sao trong cơ sở dữ liệu, nhưng có thể xảy ra, đối với một tổ hợp pileposition có một hoặc hai văn bản khác nhau trong cột thông tin. Và đó là những mục tôi cố gắng tìm.

Tôi đã thử các sau

SELECT COUNT(DISTINCT(`pile`, `position`)) FROM db; 

Nhưng nhận được một thông báo lỗi

ERROR 1241 (21000): Operand should contain 1 column(s) 

Có cách nào để tìm kết hợp khác nhau của các giá trị trong hai cột?

+0

thử này ** SELECT COUNT (DISTINCT ('pile' + 'position')) TỪ db; ** – Luv

Trả lời

11

này hoạt động ngay cả khi không subselects.

SELECT 
    `pile`, 
    `position`, 
    COUNT(*) AS c 
FROM 
    db 
GROUP BY 
    `pile`, 
    `position` 
HAVING c > 1; 

Lệnh trên cho thấy tất cả các kết hợp của pileposition xảy ra nhiều hơn một lần trong bảng db.

0

Để có được số lượng các bản sao khác nhau (nhóm bằng cách sử dụng trong lựa chọn sau đây)

select count(*) 
    from (
    select pile, position 
    from db 
group by pile, position 
     ) x 

Để tìm các hồ sơ trùng lặp thực tế

select db.* 
    from (
    select pile, position 
    from db 
group by pile, position 
    having count(*) > 1 
     ) x 
    join db on db.pile = x.pile and db.position = x.position 
+0

Bạn không được phân tích cú pháp ... – Rog

0
SELECT * 
FROM db x 
WHERE EXISTS (
    SELECT 1 FROM db y 
    WHERE y.pile = x.pile 
    AND y.position =x.postion 
    AND y.other_field <> x.other_field 
); 

Bây giờ, cho other_field bạn có thể sử dụng một số cột id duy nhất, hoặc bất kỳ sự kết hợp của các lĩnh vực (trừ {cực, vị trí} dĩ nhiên)

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