2011-04-29 9 views
6

masz tabelę z 4 kolumnami:jak znaleźć osoby o tym samym nazwisku?

klucz podstawowy/nazwa/nazwisko/nazwę środkowy

Jak napisać Zapytań SQL, aby znaleźć ludzi, który ma taką samą nazwę rodziny?

1/Ivan/Ivanov/Ivanovich

2/Petr/Levinsky/Aleksandrovich

3/Alex/Ivanov/albertovich

powinien powrócić Iwan i Alex

Dzięki

Odpowiedz

9

W standardzie SQL można po prostu dołączyć do stołu ze sobą:

select a.name, b.name 
from t as a, t as b 
where a.surname = b.surname and a.id < b.id 

t gdzie jest twój stół i id jest kolumna klucz podstawowy.

Powoduje zwrócenie wszystkich odrębnych par imion dla każdego nazwiska, które ma wiele pozycji. Możesz dodać do listy wybranych kolumn.

0

Chcesz GROUP BY the nazwisko, a następnie użyj klauzula HAVING, aby znaleźć grupy, które mają> 1.

Nietestowane:

SELECT 
    name 
FROM 
    theTable 
WHERE Surname IN (
    SELECT 
     Surname 
    FROM 
     theTable 
    GROUP BY 
     Surname 
    HAVING 
     COUNT(Surname) > 1) 
+1

Nie robi tego, o co prosi OP (zwróć imiona). – NPE

+0

@aix - poważnie? Zakładam, że jeśli jest to pytanie do wywiadu, będzie wiedział trochę o SQL i będzie mógł dołączyć do wyników z powyższego zapytania. – Fermin

-1
select surname,group_concat(firstname) 
from people 
group by surname 
having count(firstname)> 1; 
0

jak dla mnie najłatwiej jest do ewidencji GROUP BY nazwisko i wybierz te, z liczbą ponad 1.

8

Jeśli chcesz znaleźć dokładnie nazwy to należy najpierw znaleźć wszystkie nazwiska, które pojawiają się więcej niż raz i znajdź wszystkie imiona:

select name 
    from t 
    where surname in (select surname from t group by surname having count(surname) > 1); 
+1

+1 jedyna poprawna odpowiedź do tej pory – Martin

Powiązane problemy