Обновить записи таблицы, удовлетворяющие условию, связанному с той же таблицей - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь обновить столбец даты записей, удовлетворяющих следующему условию:

  • Столбец STATION должен совпадать с STATION из записи с FILTER_NR = x
  • И СОСТОЯНИЕ В (11, 12, 13)
  • AND FILTER_NR! = X

Если x = 3, оператор UPDATE, который я ищу, должен изменить Table FILTER с:

+-----------+------------+---------+---------+
| FILTER_NR | PROBEDATE  | STATION |  STATUS |
+-----------+------------+---------+---------+
|         1 | 2011-06-01 |       1 |      10 |
|         2 | 2011-06-02 |       1 |      11 |
|         3 | 2011-06-03 |       1 |      12 |
|         4 | 2011-06-04 |       2 |      13 |
+-----------+------------+---------+---------+

до:

+-----------+------------+---------+----------+
| FILTER_NR | PROBEDATE  | STATION |  STATUS  |
+-----------+------------+---------+----------+
|         1 | 2011-06-01 |       1 |       10 | -> not changed
|         2 | 2011-06-01 |       1 |       11 | -> changed
|         3 | 2011-06-03 |       1 |       12 | -> not changed
|         4 | 2011-06-04 |       2 |       13 | -> not changed
+-----------+------------+---------+----------+

Я начал со следующего оператора SQL, знаете, как я могу его выполнить?

UPDATE FILTER SET PROBEDATE = ADDDATE(PROBEDATE, -1)
WHERE FILTER_NR IN (...);

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Это должно сработать для вас:

UPDATE `FILTER` `F`
INNER JOIN `FILTER` `F1` ON `F1`.`FILTER_NR` = 3 AND `F1`.`STATION` = `F`.`STATION`
SET `F`.`PROBEDATE` = CURDATE()
WHERE `F`.`FILTER_NR` != 3
AND `F`.`STATUS` IN (11, 12, 13);

В моем примере я установил PROBEDATE на текущую дату, но, пожалуйста, не стесняйтесь установить его на то, что вам может понравиться.

Надеюсь, это поможет!

2 голосов
/ 28 июня 2011

Вы можете связать что-то вроде этого:

UPDATE  FILTER 
SET     PROBEDATE = PROBEDATE - inteval 1 day
WHERE   STATUS IN (11,12,13)
        AND FILTER_NR != 3
        AND STATION IN
        (
        SELECT  STATION
        FROM    (
                SELECT  *
                FROM    FILTER
                ) as SubQueryAlias
        WHERE   FILTER_NR = 3
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...