我正在尝试根据条件使用表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
。请帮忙。有点紧急。
答案 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