触发器中的多个查询

时间:2014-06-13 15:24:10

标签: mysql sql database phpmyadmin triggers

我使用触发器相当新,并且有一个小问题。 我有一个触发器在新插入的查询和客户表之间找到匹配。

INSERT INTO customersmatched (customerID,enquiryID) SELECT id, NEW.id FROM customer AS c WHERE c.customerName=NEW.companyName HAVING COUNT(id)=1;

然后我需要更新新插入的查询,以便它具有显示匹配的状态(但仅当它已匹配时)。所以我尝试在插入后添加这一行。

UPDATE enquiry SET status="Live-Enquiry" WHERE id IN ( SELECT enquiryID FROM customersmatched WHERE enquiryID = NEW.id);

除非我收到此错误:

  

MySQL说:#1064 - 你的SQL语法有错误;检查   手册,对应于>右侧的MySQL服务器版本   语法使用近< UPDATE查询SET状态="实时查询"在哪里id   IN(选择enquiryID FROM cus'第5行

如何在触发器中允许多个查询。我尝试过这样的链接:Multiple insert/update statements inside trigger?

但也不起作用。我使用phpmyadmin btw。有人可以帮忙吗? :d

1 个答案:

答案 0 :(得分:0)

如果您启用了ansi引号,那么您不能使用双引号作为字符串文字,而是需要使用单引号。请参阅:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes否则,我看不到任何语法错误。

尝试将SET status="Live-Enquiry"更改为SET status='Live-Enquiry'

编辑:

第一个查询的目的是什么?我不确定您在该查询中是否需要HAVING。如果想要一个不同的匹配列表,只需使用DISTINCT

INSERT INTO customersmatched (customerID,enquiryID) 
SELECT DISTINCT id, NEW.id 
FROM customer AS c 
WHERE c.customerName=NEW.companyName;

第二个查询,如果我理解正确的话,可以简化为:

UPDATE enquiry 
SET status='Live-Enquiry' 
WHERE id = NEW.id;