【发布时间】:2014-07-31 14:45:38
【问题描述】:
我需要编写一个触发器,如果传入查询的 customerName 与同义词表中的客户名称匹配,则该表中的 customerID 用于在 customer 表中查找客户。
我得到了一个触发器,它只搜索了客户表而不是同义词表。我在想类似的东西:(这是伪代码)
CREATE TRIGGER `Find Customer` AFTER INSERT ON `enquiry` FOR EACH ROW
BEGIN
INSERT INTO customersmatched (enquiryID, customerID)
SELECT NEW.id, id, customerName, customerID FROM customer, customerSynonyms WHERE
customerSynonyms.customerName = NEW.companyName AND customer.id = customerSynonyms.customerID
HAVING COUNT(id)=1
END;
我收到的错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 7
但我担心这行不通。
知道如何在 mySQL 中进行此操作吗?谢谢!
更新
我也试过这种方法 - 也没有用!
DELIMITER $$
CREATE TRIGGER Find_Customer AFTER INSERT ON enquiry
FOR EACH ROW
BEGIN
IF EXISTS (SELECT customerID FROM customerSynonyms WHERE customerName = NEW.companyName) THEN
IF EXISTS (SELECT id FROM customer WHERE id = @customerID) THEN
INSERT INTO customersMatched (enquiryID, customerID)
HAVING COUNT(id)=1
END IF;
END IF;
END$$
DELIMITER ;
更新 2
事实证明,我对把事情复杂化了如指掌。 customerSynonym 表将 customerID 存储在一个列中,这是我真正需要的,因为我可以通过 php 使用 customerID 获取所有数据。最后的触发非常简单:
INSERT INTO customersmatched (enquiryID, customerID)
SELECT NEW.id, customerID FROM customersynonyms WHERE
customersynonyms.customerName=NEW.companyName
HAVING COUNT(id)=1
感谢您的所有回答,他们总是非常感谢! :-)
【问题讨论】:
-
INSERT INTO <2 fields> ... SELECT <4 fields>这不适合在一起。 -
您能否成功地在触发器中自行运行查询?
-
我已经用我找到的解决方案更新了我的问题。这比我最初尝试做的任何事情都简单得多! :-P
标签: mysql if-statement sql-insert triggers