2015-07-09 2 views
1

Мне нужно обновить таблицу, соединив другую таблицу друг с другом. Ниже приведен пример.заказывать во внутреннем соединении при обновлении таблицы

Employee table: 

role  name Time create 
manager  abc  2013 
sales  def  2014 
manager  xyz  2015 
sales  dje  2015 

Currentteam: 

role  name 
manager 
sales 

мне нужно обновить Currentteam таблицу с именем из таблицы сотрудников, но мне нужно обновить в последнее имя означает для manager роли. У нас есть два имени в таблице Employee, но мне нужно обновить только одно имя, которое является последним   —, то есть XYZ. Я попытался сделать что-то вроде ниже, но это не позволяет order by в подзапросе.

Update currentteam 
Set name=temp.name 
From currentteam 
Inner join (select * from employee order by timecreate) as temp on temp.role=currentteam 

Просьба сообщить!

+1

Пожалуйста, выберите базу данных, которую вы используете, и присвойте соответствующие метки. MySQL <> SQL Server. –

+0

«Пожалуйста, советую !!!» --- Почему бы не быть вежливым и спросить красиво? – jpaugh

+0

Прошу прощения за то, что я не был хорош, но я не это имел в виду. – Vicky

ответ

3

Вы можете использовать связанный подзапрос:

SQL Fiddle

UPDATE ct 
    SET ct.name = (
     SELECT TOP 1 name 
     FROM Employee e 
     WHERE e.role = ct.role 
     ORDER BY TimeCreate DESC 
    ) 
FROM CurrentTeam ct 

РЕЗУЛЬТАТ:

| role | name | 
|---------|------| 
| manager | xyz | 
| sales | dje | 
+0

это сработало. Спасибо за помощь. – Vicky

+0

Рад помочь! –

1

Похоже, что вы используете SQL Server. Если да, то row_number() на помощь:

Update currentteam 
    Set name = temp.name 
From currentteam Inner join 
    (select e.*, 
      row_number() over (partition by role order by timecreate desc) as seqnum 
     from employee e 
    ) temp 
    on temp.role = currentteam and seqnum = 1; 
+0

это также работает, но запрос, предоставляемый wewesthemenace, менее сложный, поэтому я отметил это как ответ .. спасибо за ваш ответ. – Vicky

+0

@ Vicky. , , Этот ответ кажется более простым. –