SQL если значение в строке - PullRequest
       18

SQL если значение в строке

1 голос
/ 05 апреля 2020

Я хотел бы обновить строку, только если выполнено условие в другой строке.

что-то вроде:

IF (SELECT `allow` FROM `accountlist` WHERE `id`='myid')<'1234' 
       THEN
           IF (UPDATE `accountlist` SET `upvotes`=`upvotes`+1 WHERE `user`='myuser')
               THEN (UPDATE `accountlist` SET `allow`='1234' WHERE `id`='myid');
           END IF;
       ELSE (/*return false*/);
END IF

другими словами, если разрешить ниже 1234 на myid , с шагом upvotes в другой строке, и если вам удастся установить , разрешите до 1234, в противном случае вернуть false или некоторые значения ошибки.

Можно ли выполнить несколько запросов при выполнении условия?

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

Вам нужны CASE выражения вроде этого:

UPDATE `accountlist` 
SET `upvotes` = CASE WHEN `user`='myuser' THEN `upvotes` + 1 ELSE `upvotes` END,
    `allow` = CASE WHEN `id` = 'myid' THEN '1234' ELSE `allow` END
WHERE (SELECT `allow` FROM `accountlist` WHERE `id`='myid') < '1234'
AND EXISTS (SELECT 1 FROM `accountlist` WHERE `user`='myuser')
0 голосов
/ 05 апреля 2020
UPDATE `accountlist` 
SET `upvotes` = `upvotes` + (`user` = 'myuser'),
    `allow` = CASE WHEN`id`='myid'
                   THEN '1234'
                   ELSE `allow`
                   END
WHERE ( SELECT `allow` 
        FROM `accountlist` 
        WHERE `id`='myid' ) < '1234';
0 голосов
/ 05 апреля 2020

Вы можете просто использовать оператор update с предложением where:

UPDATE `accountlist` 
     SET `upvotes`= (CASE WHEN `user`='myuser' THEN `upvotes` + 1 ELSE `upvotes` END),
         `allow` = (CASE WHEN `id` = 'myid' THEN '1234' ELSE `allow` END)
WHERE `id`='myid' AND allow < 1234
...