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

Откуда: Ростов-на-Дону
Сообщений: 11
Есть две таблицы Т1 и Т2, где одной записи из Т1 соответствуют несколько записей из Т2 - в Т2 есть поле "Т1_id".
Нужно сделать выборку из Т1 и Т2 так, чтобы записи из Т1 сопоставлялась только первая из соответствующих ей записей из Т2.
Подскажите, как попроще это реализовать.
14 дек 11, 11:34    [11762533]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
oblomov86
чтобы записи из Т1 сопоставлялась только первая из соответствующих ей записей из Т2
первая откуда? от центра винчестера?
14 дек 11, 11:35    [11762547]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
вариантов масса
от сабквери до роу_нумбер.... только вот на впорос Паганеля - все равно прийдеться ответить
14 дек 11, 11:37    [11762562]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
oblomov86
Member

Откуда: Ростов-на-Дону
Сообщений: 11
Паганель, первая, у которой id меньше.
14 дек 11, 11:38    [11762576]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
лучше через cross apply

select * from t1 
 cross apply (select top 1 * from t2 where t2.ссылка_на_T1 = t1.id order by t2.id)
14 дек 11, 11:41    [11762607]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Альяс только в конце надо добавить.
14 дек 11, 11:44    [11762626]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
oblomov86
Member

Откуда: Ростов-на-Дону
Сообщений: 11
Deff,
спасибо большое.
14 дек 11, 11:48    [11762652]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
vicktor
Member

Откуда:
Сообщений: 62
здравствуйте. а как будет выглядеть запрос на SQL2000? спасибо.
12 мар 12, 16:25    [12233072]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
vicktor, с подзапросом по min(id)
12 мар 12, 16:27    [12233094]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
vicktor
Member

Откуда:
Сообщений: 62
kDnZP,

можно код, плиз, а то я недогоняю
12 мар 12, 16:45    [12233279]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос для отношения 1 : m  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
vicktor
kDnZP,

можно код, плиз, а то я недогоняю

CREATE TABLE #tbl1 ( id INT )
CREATE TABLE #tbl2 ( id INT, rId1 INT )

INSERT INTO #tbl1(id)
SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3

INSERT INTO #tbl2(id, rId1)
SELECT 1,1 UNION ALL SELECT 2,1 UNION ALL SELECT 3,2

SELECT * FROM #tbl1
SELECT * FROM #tbl2
/*
SELECT  *
FROM    #tbl1 t1
OUTER APPLY ( -- аналогом LEFT JOIN будет OUTER APPLY
              SELECT TOP 1
                        *
              FROM      #tbl2 t2
              WHERE     t2.rId1 = t1.id
              ORDER BY  t2.id
            ) t2
*/
SELECT * FROM #tbl1 t1 LEFT JOIN ( -- аналогом CROSS APPLY будет ессно INNER JOIN
SELECT MIN(id) mid, rId1 FROM #tbl2 GROUP BY rId1
) t2 ON t1.id=t2.rId1

DROP TABLE #tbl1
DROP TABLE #tbl2
12 мар 12, 17:01    [12233451]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить