2009-12-11 124 views
1

我想根据条件更新我的表1与来自表2的某些字段值。但我无法获得正确的查询。这里的条件:更新另一个表的记录表

我有一个表1与日期字段应该从表2日期字段更新。条件是表1的id应该等于表2的id(表2具有表1的id作为FK)。另一个条件应该是表2中有一个varchar字段,它应该有特定的值,比如说“Test”。无论表2中字段的值是否为“测试”,我想在表1日期字段中更新该记录的日期。但还有一个问题。它可能会超过1次记录相同的ID表2中可以具有作为“测试”

我试图查询为:

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 

但这不是工作作为SQL不允许Max在没有分组的情况下更新。请帮忙。有点紧急。

回答

2

您需要创建另一个内加入其中,表1的ID的耦合与表2的像这样的最大日期:

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

你总是可以使用子查询:

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 
+0

看起来正确的,但为什么使用LIKE而不是equals? – 2009-12-11 08:21:37

+0

我的第一个冲动是将它编辑为平等,但后来我认为'Test'显然是一个示例值,所以我想它可能被认为是它读取的东西,它实际上会在这个活动实现中实现,并从那里,我只是假设特德知道'LIKE'和'='之间的差异,并决定不选择,因为它是相当周边的问题=) – 2009-12-11 08:24:33

+0

凉爽的香蕉,想要确保我hadn没有错过随机的语法变化 – 2009-12-11 18:53:11

相关问题