使用另一个表中的记录更新表

时间:2009-12-11 08:02:45

标签: sql join sql-update

我正在尝试根据条件使用表2中的某些字段值更新表1。但我无法得到正确的查询。这是条件:

我有一个带有日期字段的表1,应该从表2的日期字段更新。条件是表1的id应该等于表2的id(表2将表1的id作为FK)。另一个条件应该是表2中有一个varchar字段,它应该有特定的值,比如说“Test”。只要表2中字段的值为“Test”,我想在表1日期字段中更新该记录的日期。但还有另一个问题。表2中相同id的多于1条记录可能具有“Test”值

我正在尝试查询:

UPDATE A
SET A.Date = Max(B.[Date])
FROM Table1 A
 INNER JOIN Table2 B ON A.ID = B.FK_ID
WHERE (B.Changed LIKE 'Test')
 AND A.Date IS NULL

但这不起作用,因为当没有group by时,sql不允许更新Max。请帮忙。有点紧急。

2 个答案:

答案 0 :(得分:2)

您需要创建另一个内连接,其中Table1的ID与Table2的最大日期相结合,如下所示:

UPDATE    Table1
SET       Date = BDate.MaxDate
FROM      Table1 A
          INNER JOIN Table2 B ON A.ID = b.FK_ID
          INNER JOIN (
              SELECT    A.ID, [MaxDate] = MAX(B.Date)
              FROM      Table1 A
                        INNER JOIN Table2 B ON A.ID = b.FK_ID
              GROUP BY  A.ID
          ) BDate ON BDate.ID = A.ID
WHERE     B.Changed LIKE 'Test'
          A.Date IS NULL

答案 1 :(得分:1)

您始终可以使用子查询:

UPDATE Table1 a SET
    [Date] = (SELECT MAX([Date]) FROM Table2 b WHERE a.ID = b.FK_ID AND b.Changed LIKE 'Test')
WHERE [Date] IS NULL