J'ai un tableau avec la structure et les données ci-dessous:
create table employee (id int, name varchar, father_name varchar);
insert into employee values(1, 'John', 'Alex'),(2, 'Simi', 'Expatri'),(3,
'John', 'Alex'),(4, 'Hezad', 'Ambrose'),(5, 'John', 'Alex'), (6, 'Simi',
'Expatri'), (7, 'Hezad', 'Ambrose'), (8, 'John', 'Reman'), (9, 'Komal',
'Ambrose');
Maintenant, je veux récupérer les enregistrements dont les deux colonnes name
et father_name
correspondent les uns aux autres.
Le résultat souhaité serait le suivant:
id | name | father_name
1 | John | Alex
3 | John | Alex
5 | John | Alex
2 | Simi | Expatri
6 | Simi | Expatri
4 | Hezad | Ambrose
7 | Hezad | Ambrose
Toute aide est appréciée à l'avance.
Commande par name
et father_name
est la première étape, mais je suppose que vous ne voulez pas d'enregistrements où aucun autre enregistrement correspondant n'est trouvé. Cela fonctionnerait:
select e1.id, e1.name, e1.father_name
from employee as e1
inner join employee as e2
on e1.name = e2.name
and e1.father_name = e2.father_name
and e1.id != e2.id
group by e1.id, e1.name, e1.father_name
order by e1.name, e1.father_name
Ici est une démo qui fonctionne.
select id, name, father_name
from employee
where (name, father_name) in (
select name, father_name
from employee
group by name, father_name
having count(*) > 1
)
order by father_name, name