我想在数据库中显示所有重复项(Example of the table here)
在这种情况下,我希望:
名字(meta_key> _field_5),
姓氏(meta_key> _field_6),
电子邮件(meta_key> _field_7)
是独一无二的。因此,只显示具有这三个参数的重复项与原始参数相同。在这种情况下,它是最后两个结果(See the screenshot [Highlighted in red])。
提前致谢!
亲切的问候,
约拿
答案 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
);