1

Table1 と Table2 の 2 つのテーブルがあります。これらのテーブル間の共通列は CustId です。テーブル 1 には 1 つの CustId の複数のレコードが含まれていますが、マスター テーブルである table2 には、関連するすべての顧客情報を含む Custid のレコードが 1 つだけ含まれています。

私がやりたいことは、table1 の最近変更されたレコードで table2 を更新することです。

マスターテーブルには複数のレコードがあるため、クエリをループで実行したいと考えています。

私は次のように書いています。

update Table1 
set 
Table1.col1=b.col1,
Table1.col2 = b.col2,
Table1.col3 = case
 when b.col3 = (select Id from table4 where  name = 'Not Listed')
 then b.col4
 else b.col3
 end, 
Table1.col4 = case
 when b.col5 in (select Id from table5 where name = 'Not Listed')
 then b.col6
 else b.col5
 end
from 
    (select top 1 Table2.* 
    from Table2,Table1 where 
    Table2.CustId = Table1.CustId
    Order by 
    Table2.modifiedon desc )b

where Table1.CustId = b.CustId

しかし、table2 のすべてのレコードに対して実行されるかどうかはわかりません。

Plsヘルプ

4

1 に答える 1

0

内部結合を使用して更新してみてください。詳細については、SQL UPDATE 構文の習得に関するリンクを参照してください。

UPDATE T1
SET T1.col1=b.col1,
    T1.col2 = b.col2,
    T1.col3 = (case when b.col3 = (select Id from table4 where  name = 'Not Listed')
            then b.col4
            else b.col3 end),
    T1.col4 = (case when b.col5 = (select Id from table5 where name = 'Not Listed')
            then b.col6
            else b.col5 end)

FROM Table1 T1 INNER JOIN 
(
    select ROW_NUMBER() over(partition by CustId order by modifiedon desc) Rnum,
        CustId, modifiedon, col1, col2, col3, col4, col5, col6
    FROM Table2

)x ON x.CustId=T1.CustId
WHERE x.Rnum=1
于 2013-01-24T10:35:56.953 に答える