Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дубликаты [D7, IB6.x]


Kirill ©   (2004-07-17 16:40:00) 

Как получить записи в таблице
1 ID
2 NAME
только те, которые с одинаковым NAME.
Различаться могут в регистре


Kirill   (2004-07-17 18:14:00) [1]

Большое спасибо за советы. Вот что я уе сам написал по предыдущему сообщению:

select id, name from tbluser
where name in (select name from tbluser
group by upper(user)
having count (upper(user)) > 1)
order by user, id


P.N.P.   (2004-07-17 17:49:00) [2]

select id, name from tbluser
group by id,upper(name)
having count(upper(name)) > 1

но, если id- содержит уникальные значения, то ничего не получится.

Что бы выбрать в таком случае еще и id - придется сделать процедуру
типа


CREATE PROCEDURE NEW_PROCEDURE
RETURNS (
   ID INTEGER,
   NAME VARCHAR(100))
AS
begin
for
select RUPPER(name) from tbluser
   group by RUPPER(name)
   having count (RUPPER(name)) > 1
into :NAME do
begin
select  MIN(id) from tbluserwhere RUPPER(tbluser.name)=:NAME into :ID;
 suspend;
end
end


Sergey Masloff   (2004-07-17 17:48:00) [3]

А с каких пор IB6 научился GroupBy по функциям делать?


Kirill   (2004-07-17 17:41:00) [4]


> Возможно у тебя не все выбираемые поля занесены в group
> by.
> Покажи текст запроса


select id, name from tbluser
group by upper(name)
having count(upper(name)) > 1


P.N.P.   (2004-07-17 17:36:00) [5]

Возможно у тебя не все выбираемые поля занесены в group by.
Покажи текст запроса


Kirill   (2004-07-17 17:33:00) [6]

EMS IB/FB Manager выдает ошибку

fmSQLEditor.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).


P.N.P.   (2004-07-17 17:21:00) [7]

Первый вариант выберет без ненужных повторов ВСЕ записи,
второй - выберет в единственном экземпляре только те, где
есть повторы


P.N.P.   (2004-07-17 17:18:00) [8]

Если нужны только дубликаты - то
select UPPER(name) from MyTable
   group by UPPER(name)
   having count (UPPER(name)) > 1


Kirill   (2004-07-17 17:12:00) [9]


> select distinct UPPER(name) from MyTable

Это уберет повторы. Или я не прав?
Мне нужны только повторы.


P.N.P.   (2004-07-17 16:57:00) [10]

select distinct UPPER(name) from MyTable,
но, если учесть, что UPPER работает только с
буржуйскими буквами - выход один - использовать
UDF, например RFunc. Или самому написать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо