Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用另一个表中的记录更新表_Sql_Join_Sql Update - Fatal编程技术网

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

Sql 使用另一个表中的记录更新表,sql,join,sql-update,Sql,Join,Sql Update,我试图根据一个条件用表2中的一些字段值更新表1。但是我无法得到正确的查询。条件如下: 我有一个带有日期字段的表1,它应该从表2的日期字段更新。条件是表1的id应等于表2的id(表2的id为FK)。另一个条件应该是表2中有一个varchar字段,它应该有特定的值,比如“Test”。如果表2中字段的值为“Test”,我想用表1日期字段中的记录更新日期。但还有一个陷阱。表2中相同id的多个记录可能具有“Test”值 我正在尝试以下查询: UPDATE A SET A.Date = Max(B.[Dat

我试图根据一个条件用表2中的一些字段值更新表1。但是我无法得到正确的查询。条件如下:

我有一个带有日期字段的表1,它应该从表2的日期字段更新。条件是表1的id应等于表2的id(表2的id为FK)。另一个条件应该是表2中有一个varchar字段,它应该有特定的值,比如“Test”。如果表2中字段的值为“Test”,我想用表1日期字段中的记录更新日期。但还有一个陷阱。表2中相同id的多个记录可能具有“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

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

您可以随时使用子查询:

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

您需要创建另一个内部联接,其中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

我的第一个冲动是将其编辑为等于,但后来我发现
Test
显然是一个虚构的示例值,所以我猜它可以被理解为,在这个实时实现中,它实际上会有其他东西,从那里开始,我只是假设Ted知道像这样的
=
之间的区别,并决定不挑这个问题,因为这是一个非常容易回答的问题=)酷香蕉,想确保我没有错过一个随机的语法变化