2013-06-21 4 views
0

Я хотел бы найти способ обновить таблицу другими 2-мя. Вот сценарий:Обновление записей SQL с другими 2 таблицами

EmptyTbl: contents missing info (fname, lname, address) 

Info1Tbl & Info2Tbl: complete info 

Пожалуйста, смотрите SQL скрипку - http://sqlfiddle.com/#!3/b8b13/1 для приведенных выше таблиц, созданных.

База по номеру телефона и необходимо обновить EmptyTbl из Info1Tbl & Info2Tbl с Latest информация обновления от этих 2-х таблиц. Пожалуйста, помогите с запросом.

+0

Я посмотрел на свой sqlFiddle, и я до сих пор не ясно, что вы пытаетесь сделать. Как строки в EmptyTbl связаны с Info1Tbl и Info2Tbl? –

+0

@BillGregg по телефону поле – tkvo

ответ

2

Попробуйте

;with cte as 
(
    select * from info1tbl 
    union all 
    select * from info2tbl 
), cte2 as 
(
    select *, row_number() 
    over (partition by phone order by lastupdated desc) rn 
    from cte 
) 
--select * from cte2 where rn = 1 
update e 
set e.fname = cte2.fname, 
e.lname = cte2.lname, 
e.address = cte2.address 
from emptytbl e 
inner join cte2 on e.phone = cte2.phone 
where rn = 1 

DEMO HERE

+0

Большое спасибо @rs – tkvo

6

Вы можете сделать следующее UPDATE:

WITH CTE1 AS 
(
    SELECT * 
    FROM Info1Tbl 
    UNION ALL 
    SELECT * 
    FROM Info2Tbl 
), CTE2 AS 
(
    SELECT *, 
      RN=ROW_NUMBER() OVER(PARTITION BY phone ORDER BY lastupdated DESC) 
    FROM CTE1 
) 
UPDATE A 
SET A.fname = B.fname, 
    A.lname = B.lname, 
    A.address = B.address 
FROM EmptyTbl A 
INNER JOIN CTE2 B 
    ON A.phone = B.phone 
WHERE B.RN = 1; 

SELECT * 
FROM EmptyTbl 

Результаты:

╔════════╦═════════╦═══════╦════════════════╦════════════╗ 
║ CUSTID ║ FNAME ║ LNAME ║ ADDRESS  ║ PHONE ║ 
╠════════╬═════════╬═══════╬════════════════╬════════════╣ 
║ 001 ║ Tom  ║ Suma ║ 999 ABC Street ║ 1234567890 ║ 
║ 002 ║ Naomy ║ Bath ║ 46 Main Street ║ 1234567891 ║ 
║ 003 ║ Vanny ║ Smith ║ 1234 Road  ║ 1234567892 ║ 
║ 008 ║ Beth ║ Tan ║ 456 Ave.  ║ 1234567893 ║ 
║ 005 ║ Richard ║ Howie ║ 45 Main Road ║ 1234567894 ║ 
╚════════╩═════════╩═══════╩════════════════╩════════════╝ 

И modified sqlfiddle.

+0

awesome, спасибо. – tkvo

Смежные вопросы