2014-11-08 2 views
-1

Если у меня есть таблицы, как:SQL запроса Update и где пункт

  • Materials (MaterialID, Name)
  • Teacups (TeacupID, описание, FriendlyName, MaterialID)

С данными например:

(1, 'Glass') 
(2, 'Porcelain') 
(3, 'Iron') 

Чайных:

(1, 'Desc1', 'Name1', 1) 
(2, 'Desc2', 'Name2', 1) 
(3, 'Desc3', 'Name3', 1) 
(4, NULL, 'Name1', 2) 
(5, NULL, 'Name2', 2) 
(6, 'Desc6', 'Name3', 2) 
(7, 'Desc7', 'Name1', 3) 
(8, NULL, 'Name2', 3) 
(9, NULL, 'Name3', 3) 

Как обновить все описания (будь то NULL или нет), чтобы иметь то же описание, что и чашки с MaterialID=1, совпавших по FRIENDLYNAME

Так данные должны быть похожи:

Teacups:

(1, 'Desc1', 'Name1', 1) 
(2, 'Desc2', 'Name2', 1) 
(3, 'Desc3', 'Name3', 1) 
(4, 'Desc1', 'Name1', 2) 
(5, 'Desc2', 'Name2', 2) 
(6, 'Desc3', 'Name3', 2) 
(7, 'Desc1', 'Name1', 3) 
(8, 'Desc2', 'Name2', 3) 
(9, 'Desc3', 'Name3', 3) 

ответ

2

Самый простой способ - использовать JOIN clause в заявлении UPDATE. Попробуйте это ..

UPDATE A 
SET A.Description = B.Description 
FROM Teacups A 
     JOIN (SELECT Description, 
        FriendlyName 
      FROM teacups 
      WHERE MaterialID = 1) b 
     ON a.FriendlyName = B.FriendlyName 
Where A.MaterialID != 1 
+0

проверить имя столбца materailid, где условие? Не работает из-за неправильного имени столбца. –

+0

@PareshJ - спасибо, парень обновлен –

+0

Отдых все хорошо !!! –

1
UPDATE tUp 
    SET tUp.Description = t1.Description 
    FROM Teacups tUp 
    JOIN Teacups t1  
    ON t1.FriendlyName = tUp.FriendlyName 
    and tUp.MaterialID <> 1 
    and t1.MaterialID = 1 
--and tUp.Description <> t1.Description 
-1

Можно создать временную таблицу и вставить значения этого запроса:

SELECT * from teacups WHERE MaterialID = 1; --insert into table 'temp' 

Затем вы можете обновить таблицу:

UPDATE teacups SET description = temp.description WHERE teacups.FriendlyName = temp.FriendlyName; 
+0

Попробуйте выполнить запрос и проверить результат. –

0

Вы можете необходимо использовать заявление MERGE, как указано ниже:

MERGE INTO Teacups as trg 
USING (
     SELECT FriendlyName, Description FROM Teacups WHERE MaterialID = 1 
     ) AS src 
ON trg.FriendlyName = src.FriendlyName 
WHEN MATCHED THEN 
    UPDATE SET trg.Description = src.Description; 
Смежные вопросы