как найти людей с одинаковой фамилией?

#sql

#sql

Вопрос:

У вас есть таблица с 4 столбцами:

Первичный ключ / имя / фамилия / среднее имя

Как написать Sql-запрос, чтобы найти людей с одинаковой фамилией?

1 / Иван / Ivanov / Иванович

2 / Петр / Левинский / Александрович

3 / Алекс / Иванов / альбертович

Следует вернуть Ivan и Alex

Спасибо

Ответ №1:

В стандартном SQL вы можете просто объединить таблицу с самой собой:

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

где t находится ваша таблица и id является ли столбец первичного ключа.

Это возвращает все отдельные пары имен для каждой фамилии, имеющей несколько записей.

Возможно, вы захотите добавить surname в список выбранных столбцов.

Комментарии:

1. почему a.id < b.id ? Я не понимаю, вы можете объяснить?

Ответ №2:

Если вы хотите найти точные имена, то сначала вам следует найти все фамилии, которые появляются более одного раза, и найти все имена:

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

Ответ №3:

Как по мне, самый простой способ — сгруппировать записи по фамилии, а затем выбрать те, количество которых больше 1.

Ответ №4:

Вы хотите СГРУППИРОВАТЬ ПО фамилии, а затем использовать предложение HAVING, чтобы найти любые группы, имеющие > 1.

Непроверенный:

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

Комментарии:

1. Это не выполняет то, что запрашивает OP (возвращает имена).

2. @aix — серьезно? Я предполагаю, что если это вопрос для собеседования, он немного разбирается в SQL и сможет присоединиться к результатам приведенного выше запроса.

Ответ №5:

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