Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 UPDATE с from table1 join table2. Апдейтить только если 1 соответствие  [new]
Гой необыновенный
Guest
У меня такая проблема... Есть Апдейт с FROM и надо апдейтил только те строки которые имеют одно соответствие. Ну вот возьмём для примера такой вариант:
if object_id('n','U') is null create table N(f1 char,f2 int) else delete N
if object_id('m','U') is null create table M(f1 char,f2 int) else delete M

insert into N select 'a',1
insert into m select 'a',2
insert into N select 'b',1
insert into m select 'b',5
insert into m select 'b',4
insert into m select 'b',1
insert into m select 'b',2
insert into N select 'c',1
insert into m select 'c',4
insert into m select 'c',3
insert into m select 'c',5
select n.*,m.* from n join m on n.f1 = m.f1
select * from n
UPDATE N set f2 = m.f2 from n join m on n.f1 = m.f1

select * from n

/*
DROP TABLE N
DROP TABLE M
*/



Мне надо чтобы апдейтил запись таблицы N только в случае если в таблице M ей соответствует только одна запись по заданному условию, а в других случаях делаем что то другое... Как это сделать?
22 июн 12, 06:38    [12757154]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с from table1 join table2. Апдейтить только если 1 соответствие  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Гой необыновенный,

SELECT N.f2, m1.f2
    FROM N
         INNER JOIN (SELECT  m.f1      AS f1
                           , MAX(m.f2) AS f2
                         FROM m
                         GROUP BY m.f1
                         HAVING COUNT(*) = 1
                     ) m1 ON m1.f1 = N.f1

P.S. Считайте сто T-SQL регистрозависимый язык, потому что тынц. Мне, например, пришлось исправлять регистр в Вашем коде.
22 июн 12, 07:14    [12757169]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с from table1 join table2. Апдейтить только если 1 соответствие  [new]
Гой необыновенный
Guest
Guf
Гой необыновенный,

SELECT N.f2, m1.f2
    FROM N
         INNER JOIN (SELECT  m.f1      AS f1
                           , MAX(m.f2) AS f2
                         FROM m
                         GROUP BY m.f1
                         HAVING COUNT(*) = 1
                     ) m1 ON m1.f1 = N.f1

P.S. Считайте сто T-SQL регистрозависимый язык, потому что тынц. Мне, например, пришлось исправлять регистр в Вашем коде.



Понятненько. Спасибо.
22 июн 12, 07:40    [12757180]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить