Обновить столбец, когда дата в другой таблице старше, чем сегодня - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть два стола "Auftrag" и "Position". «Auftrag» является ведущей таблицей, «Position» содержит «Auftrags» .ID в качестве идентификатора (Positionen.FremdID)

У меня следующая проблема:

В таблице «Positionen» есть столбец с именем «Lieferdatum» (DateTime), а в таблице «Auftrag» - столбец «Status». Теперь я изменю столбец Auftrag.Status, если Positionen.Lieferdatum старше, чем сегодня.

Понятия не имею, как справиться с этой проблемой.

РЕДАКТИРОВАТЬ: между 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

Стол "Позиционный"

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

Выход:

Только если в этом случае истекли обе строки в Positionen от Auftrag.ID = 1, тогда статус в Auftrag должен быть изменен

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Если в 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()));
0 голосов
/ 24 апреля 2019

Я не вижу проблем с вашим запросом, кроме использования обновления вместо select.

UPDATE A 
SET Status = "yourstatus"
FROM Auftrag  A JOIN
     Positionen B
     ON A.ID = B.FremdID
WHERE B.Lieferdatum < CURRENT_TIMESTAMP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...