我有两个表“ 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中的状态
答案 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()));