#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;