2013-10-10 4 views
0

У меня есть две таблицы - 'клиентов' и 'clients_address'SQL - TRIGGER ПОСЛЕ INSERT

Существует на столе 'клиентов' столбца с именем "телефон. мне нужно иметь один и тот же столбец «телефона» в таблице «clients_address»

создать колонку «телефона» в таблице «clients_address» и йоту этой команды я скопировал данные из "clients.phone «:

UPDATE clients_addresses 
SET clients_addresses.phone=(SELECT clients.phone 
FROM clients 
WHERE clients.id=clients_addresses.client_id); 

Все копируется правильно, но это не autou бновить. И после новой регистрации пользователя мне нужно снова выполнить эту команду. Я пытаюсь с помощью триггера, но SQL возвращает мне sintax-ошибку. Это то, что я пытаюсь:

CREATE TRIGGER up 
ON clients.phone 
AFTER INSERT 
BEGIN 
UPDATE clients_addresses 
SET clients_addresses.phone=(SELECT clients.phone 
FROM clients 
WHERE clients.id=clients_addresses.client_id) 
END; 

Я не очень хорошо в SQL. Пожалуйста помоги.

+1

Помогите нам, сообщая вам об ошибке. – pordi

ответ

1

Попробуйте следующее:

CREATE TRIGGER up 
AFTER INSERT 
    ON clients 
    FOR EACH ROW 
BEGIN 
    UPDATE clients_addresses 
    SET clients_addresses.phone = :new.phone 
    WHERE clients_addresses.client_id = :new.id; 
END; 

Какую базу данных вы используете?

0

Что вам не хватает, это ; после вашего заявления о обновлении. Тем не менее это закончит определение триггера. Чтобы указать, что ; завершает инструкцию обновления, но не определение триггера, сначала нужно изменить разделитель.

DELIMITER $$ 
CREATE TRIGGER up 
ON clients.phone 
AFTER INSERT 
BEGIN 
UPDATE clients_addresses 
SET clients_addresses.phone=(SELECT clients.phone 
FROM clients 
WHERE clients.id=clients_addresses.client_id); 
END $$ 
DELIMITER ; 

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

DELIMITER $$ 
CREATE TRIGGER up 
ON clients.phone 
AFTER INSERT 
BEGIN 
UPDATE clients_addresses ca 
INNER JOIN clients c ON c.id = ca.client_id 
SET ca.phone = c.phone 
WHERE c.id = NEW.id; 
END $$ 
DELIMITER ; 

Вы не указали, какие СУБД вы используете. Там могут быть отличия от правильного утверждения. Например, если вы используете MySQL, вам не хватает FOR EACH ROW. И, пожалуйста, всегда отправляйте сообщение об ошибке, которое вы получили вместе с вопросом.