Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
vicru
Member

Откуда:
Сообщений: 17
Знаю Ms SQL поверхностно.
Нужно найти дублирующий Primary key в таблице.
Ключ формируеся по трем полям IDDOC, LINENO_, ACTNO.
Помогите написать запрос.
Заранее благодарен.
21 дек 05, 07:25    [2192573]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Как это дублирующий Primary key? Primary key и дублирующий? Он по определению уникальный!
А вообще, дубли примерно так
select * from TBL t1 join
	(select IDDOC, LINENO_, ACTNO
		from TBL
		group by IDDOC, LINENO_, ACTNO
		having count(*) > 1) t2 on t1.IDDOC = t2.IDDOC
			and t1.LINENO_ = t2.LINENO_
			and t1.ACTNO = t2.ACTNO
21 дек 05, 07:36    [2192587]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
vicru
Member

Откуда:
Сообщений: 17
БОЛЬШОЕ СПАСИБО.

SQL выдал ошибку, что в таблице иммется двойной ключ. Понятно, что такого быть не должно, вот и хочется найти в каких записях ключи повторяются. А как - не умею :(
21 дек 05, 08:05    [2192606]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
vicru
Member

Откуда:
Сообщений: 17
Можно вопрос для усвоения материала?
Что это? TBL t1 - это таблица для проверки? А t2 - таже самая или другая?
21 дек 05, 08:09    [2192608]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
vicru
Можно вопрос для усвоения материала?
Что это? TBL t1 - это таблица для проверки? А t2 - таже самая или другая?
TBL - это твоя исходная проверяемая таблица.
А t1, t2 - это два алиаса (псевдонима) на эту таблицу.
21 дек 05, 08:17    [2192612]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Владимор Конев
vicru
Можно вопрос для усвоения материала?
Что это? TBL t1 - это таблица для проверки? А t2 - таже самая или другая?
TBL - это твоя исходная проверяемая таблица.
А t1, t2 - это два алиаса (псевдонима) на эту таблицу.
Вру, t1 - это алиас на таблицу, а t2 - алиас на встроенное представление (Inline View - в терминах Oracle, сам я не местный), построенное по таблице TBL
21 дек 05, 08:28    [2192625]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
vicru
Member

Откуда:
Сообщений: 17
То есть таблица сравнивается с собственным клоном?
21 дек 05, 08:40    [2192640]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Владимор Конев
Владимор Конев
vicru
Можно вопрос для усвоения материала?
Что это? TBL t1 - это таблица для проверки? А t2 - таже самая или другая?
TBL - это твоя исходная проверяемая таблица.
А t1, t2 - это два алиаса (псевдонима) на эту таблицу.
Вру, t1 - это алиас на таблицу, а t2 - алиас на встроенное представление (Inline View - в терминах Oracle, сам я не местный), построенное по таблице TBL
Всё правильно, только в MSSQL обычно говорят о вложенном запросе. Но, это нестрого, кому как нравится. ;-)
21 дек 05, 08:40    [2192642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
vicru
То есть таблица сравнивается с собственным клоном?
Не совсем с клоном. Клон подразумевает полную точную копию оригинала.
А тут из твоей таблицы TBL делается представление (вложенный подзапрос) вида:
/* Вот этот кусок кода есть ничто иное,
   как вложенный запрос на основе базовой таблицы*/
(select IDDOC, LINENO_, ACTNO
		from TBL
		group by IDDOC, LINENO_, ACTNO
		having count(*) > 1) t2 
/* Ему присвоился псевдоним t2 и далее 
   этот подзапрос объединили с исходной таблицей*/
Вот с ним-то (с представлением на основе таблицы) исходная таблица и джойнится
21 дек 05, 10:01    [2192879]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить