Обновить таблицу на основе условия - PullRequest
1 голос
/ 01 июля 2019

У меня есть столбец Table1.Tradedate и еще один столбец Table2.SettlementDate. Основываясь на сравнении этих двух, я хочу обновить столбец в таблице 2

IF (Table1.TradeDate <= Table2.SettlementDate)
BEGIN
UPDATE Table2 SET Status='Y'
END

Это то, что я пробовал, но я знаю, что это неправильно, поскольку таблица, очевидно, будет содержать более 1 записей. Итак, я считаю, что я должен сделать это

  1. использовать объединение 2 таблиц на основе некоторых @id, чтобы выбрать конкретную запись
  2. проверить условие IF для этой конкретной записи
  3. обновить столбец Status в table2.

Я надеюсь, что мой подход правильный, но я пишу его неправильно.

Table1:

SKacc | Name | TradeDate   | Othercolumns....
1     | xxx  |  01/07/2019 |
2     | xxx  |  01/06/2019 |

Таблица2:

SKAcc | Name | SettlementDate | Status |Other Columns....
1     | xxx  |  01/08/2019    | NULL   |
2     | xxx  |  01/08/2019    | NULL   |

Ответы [ 3 ]

3 голосов
/ 01 июля 2019

Попробуйте ниже

update t2 set Status = 'Y'
from table2 t2
join table1 t1 on t1.id = t2.id
where t1.tradeDate <= t2.settlementDate
2 голосов
/ 01 июля 2019

Попробуйте объединить две таблицы со связанным столбцом, а затем обновите таблицу, которую вы хотите обновить, со значением.Использование внутреннего соединения в примере, но может меняться в зависимости от варианта использования

UPDATE Table2 
  SET Status = 'Y'
  FROM Table2
  INNER JOIN Table1 ON Table1.id = Table2.table1_id
  WHERE Table1.TradeDate <= Table2.SettlementDate
1 голос
/ 01 июля 2019

Я бы не рекомендовал JOIN для этой цели.Вместо этого:

update table2
    set Status = 'Y'
    where exists (select 1
                  from table1 t1
                  where t1.id = t2.id and
                        t1.tradeDate <= t2.settlementDate
                 );

Причина, по которой я рекомендую эту версию, заключается в том, что вы не указали, что id является уникальным в table1.В общем, вы можете использовать JOIN в UPDATE только тогда, когда можете гарантировать, что есть только одна подходящая строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...