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

Откуда:
Сообщений: 20
Доброго времени суток, не знаю как правильно задать вопрос.
Суть проблемы такова, что имеется одна таблица, которая задваивает результат запроса в другой таблице.
Т.е. есть 2 таблицы:
table1 (id int, info varchar(max))
table2 (id int, a int, b int, c int ...)

соединяются таблицы по этому id, но проблема в том, что во второй таблице может быть несколько записей на 1 id, и это задваивает запись первой таблице, что в одном из запросов просто не нужно.
Так вот нужно как-то составить запрос, который будет для каждого id из первой таблицы выдавать только первую запись с таким же id из второй таблицы. как можно это сделать?
23 ноя 11, 10:49    [11642473]     Ответить | Цитировать Сообщить модератору
 Re: "один ко многим" надо превратить в "один к одному"  [new]
Glory
Member

Откуда:
Сообщений: 104751
Baxster
для каждого id из первой таблицы выдавать только первую запись с таким же id из второй таблицы

А первая - это какая именно ? От чего нумеровать ?
23 ноя 11, 10:50    [11642479]     Ответить | Цитировать Сообщить модератору
 Re: "один ко многим" надо превратить в "один к одному"  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Baxster, TOP 1, APPLY
23 ноя 11, 10:50    [11642483]     Ответить | Цитировать Сообщить модератору
 Re: "один ко многим" надо превратить в "один к одному"  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Baxster,

Кстати, а те записи, которые не нужно выводить в запрос - они реально нужны? потмоу как если вы хотите "один ко многим" надо превратить в "один к одному" , то нужно удалить из второй таблицы все дубликаты по id и сделать по этому полю первичный ключ. тогда реально будет один к одному. если нет, то либо top 1 apply, либо написать подзапрос который выберет только первую строку в рамках одного из дублирующихся ид (например используея row_number() over(...) и результат этого подзапроса сджойнить с первой таблицей.
23 ноя 11, 10:54    [11642512]     Ответить | Цитировать Сообщить модератору
 Re: "один ко многим" надо превратить в "один к одному"  [new]
Baxster
Member

Откуда:
Сообщений: 20
kDnZP
Baxster, TOP 1, APPLY

Спасибо большое, очень помогло

SomewhereSomehow
Baxster,

Кстати, а те записи, которые не нужно выводить в запрос - они реально нужны? потмоу как если вы хотите "один ко многим" надо превратить в "один к одному" , то нужно удалить из второй таблицы все дубликаты по id и сделать по этому полю первичный ключ. тогда реально будет один к одному. если нет, то либо top 1 apply, либо написать подзапрос который выберет только первую строку в рамках одного из дублирующихся ид (например используея row_number() over(...) и результат этого подзапроса сджойнить с первой таблицей.

в той таблице есть первичный ключ по другому полю, просто такова задача, что в конкретный вывод необходимо брать только одну запись.
23 ноя 11, 12:49    [11643617]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить