2015-01-08 6 views
0

Я пытаюсь установить новое значение в зависимости от значения из другой таблицы. Это триггер ПЕРЕД ДОПОЛНИТЕЛЬНЫМ. Мне нужно установить new.amount в таблице «webs» в зависимости от значения столбца процента из таблицы «webTransactions». Если процент = 30,00, то новая сумма должна измениться с любой до 0,00. То, что я пробовал до сих пор, но дает мне ошибку:установить новое значение в зависимости от другого триггера значения таблицы

if new.type=9 and new.referenceId=0 then set new.amount=0.00 where (SELECT * FROM webs s JOIN webTransactions r ON r.webId = s.id WHERE s.percent = 30.00); 

Кто-нибудь может помочь запустить этот триггер?

Спасибо

ответ

0

вы можете попробовать что-то вроде этого

UPDATE websTransactions 
SET amount= CASE 
WHEN type=9 AND referenceId=0 THEN 0.00 
ELSE amount 
END 
WHERE key IN 
(SELECT key FROM webs s JOIN webTransactions r ON r.webId = s.id 
WHERE s.percent = 30.00) 

заменить key с первичным ключом websTransactions

+0

Привет Faby, спасибо за ответ, это отсутствует процентное значение из таблицы webTransactions, как я обусловливать значение из процентов в new.amount из таблицы websTransactions? – mikeys

+0

Я добавил, где часть запроса, дайте мне знать, если теперь соответствует вашему вопросу. – faby

+0

Я проверял, но что-то не хватает, потому что вы понимаете: проценты относятся к табличным сетям, а сумма принадлежит таблице websTransactions. Как это можно добавить? – mikeys

0

Вы можете использовать некоторые более эффективный код, триггеры своего рода хранимые процедуры, поэтому запрограммируйте их таким образом. Кроме того, не обязательно присоединяться к таблице, которую вы обновляете в подзапросе.

DELIMITER $$ 

CREATE TRIGGER amount_check BEFORE UPDATE ON webs 
FOR EACH ROW 
BEGIN 
    IF NEW.type=9 and NEW.referenceId=0 THEN 
     SET @percent := (SELECT percent 
        FROM webTransactions 
        WHERE webId = OLD.id); 
     IF @percent = 33.00 THEN 
      NEW.amount = 0 
     END IF; 
    END IF; 
END$$ 

DELIMITER ; 
Смежные вопросы