以下の構造とデータのテーブルがあります。
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');
次に、2つの列name
とfather_name
が互いに一致するレコードをフェッチします。
望ましい結果は次のようになります:
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
どんな助けでも事前に感謝されます。
name
およびfather_name
による順序付けが最初のステップですが、他の一致するレコードが見つからないレコードは不要だと思います。これはうまくいくでしょう:
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
ここ は実用的なデモです。
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