当其他表中的日期早于今天时,更新列

时间:2019-04-24 12:58:19

标签: sql sql-server

我有两个表“ Auftrag”和“ Position”。 “ Auftrag”是主表,“ Position”保存着“ Auftrags” .ID作为标识符(Positionen.FremdID)

我有以下问题:

在表“ Positionen”中,有一个列名为“ Lieferdatum”(DateTime),在表“ Auftrag”中是列“ Status”。 现在,如果Positionen.Lieferdatum比今天更旧,我将更改Auftrag.Status列。

我不知道如何解决这个问题。

编辑:Auftrag和Positionen之间存在1:X关系,所以只有当所有“ Lieferdatum”都旧时,今天的状态才应更改。

我已经尝试过这样做以获取所有条目:

SELECT Auftrag.Status, Positionen.Lieferdatum
FROM Auftrag JOIN Positionen
ON Auftrag.ID = Positionen.FremdID
WHERE Positionen.Lieferdatum < CURRENT_TIMESTAMP

一些示例数据:

表“ Auftrag”

ID    Status
1     1234
2     89456

表“ Positionen”

ID    FremdID    Lieferdatum
1     1          2019-01-28 10:03:00.000
2     1          2019-01-31 11:00:00.000
3     2          2019-04-28 19:00:00.000

输出:

仅在这种情况下,来自Auftrag.ID = 1的Positionen中的两行都到期,然后才应更改Auftrag中的状态

2 个答案:

答案 0 :(得分:0)

除了使用update而不是select之外,我看不到任何查询问题。

UPDATE A 
SET Status = "yourstatus"
FROM Auftrag  A JOIN
     Positionen B
     ON A.ID = B.FremdID
WHERE B.Lieferdatum < CURRENT_TIMESTAMP

答案 1 :(得分:-1)

如果auftrag中没有行,而positionen中没有对应的行,这对我来说似乎很合理,则可以使用NOT EXISTS来检查positionen中的行,今天之后如果对于auftrag中的行,现在positionen中存在该行,则positionen中的行必须在今天之前都具有lieferdatum

UPDATE auftrag
       SET status = ?
       WHERE NOT EXISTS (SELECT *
                                FROM positionen
                                WHERE positionen.fremdid = auftrag.id
                                      AND positionen.lieferdatum >= convert(date, getdate()));
相关问题