显示mysql数据库中与特定过滤器匹配的重复项

时间:2017-08-04 09:10:19

标签: mysql sql wordpress

我想在数据库中显示所有重复项(Example of the table here) 在这种情况下,我希望:

名字(meta_key> _field_5),
姓氏(meta_key> _field_6),
电子邮件(meta_key> _field_7)

是独一无二的。因此,只显示具有这三个参数的重复项与原始参数相同。在这种情况下,它是最后两个结果(See the screenshot [Highlighted in red])。

提前致谢!

亲切的问候,

约拿

1 个答案:

答案 0 :(得分:0)

我认为旋转可以帮到这里。

如果三个值有重复的话,下面的代码可以找到最早的post_id。即你称之为原始值的那个。

select min(post_id)
from (
    select post_id,
        max(case when meta_key = '_field_5' then meta_value end) as first_name,
        max(case when meta_key = '_field_6' then meta_value end) as last_name,
        max(case when meta_key = '_field_7' then meta_value end) as email
    from your_table
    where meta_key in ('_field_5', '_field_6', '_field_7')
    group by post_id
    ) t
group by first_name, last_name, email
having count(*) > 1;

您可以从群组中排除这一个以获取重复项。

select post_id,
    max(case when meta_key = '_field_5' then meta_value end) as first_name,
    max(case when meta_key = '_field_6' then meta_value end) as last_name,
    max(case when meta_key = '_field_7' then meta_value end) as email
from your_table
where meta_key in ('_field_5', '_field_6', '_field_7')
group by post_id
having post_id != (
    select min(post_id)
    from (
        select post_id,
            max(case when meta_key = '_field_5' then meta_value end) as first_name,
            max(case when meta_key = '_field_6' then meta_value end) as last_name,
            max(case when meta_key = '_field_7' then meta_value end) as email
        from your_table
        where meta_key in ('_field_5', '_field_6', '_field_7')
        group by post_id
        ) t
    group by first_name, last_name, email
    having count(*) > 1
    );