【发布时间】:2020-03-15 03:00:26
【问题描述】:
我有四张桌子
-
Processor_products与列Name和Socket -
Motherboard与列Name和Socket -
Build与列Processor(引用Processor_products(Name)] 和Motherboard[引用Motherboard(Name)] -
Compatibility与列compatible和id
如果插入到 Build 中的处理器和主板具有不同的 Socket,我想编写在 Compatibilty.compatible 中插入“No”的触发器,或者如果它们具有相同的 Socket,则插入“Yes”。
CREATE TRIGGER compatibility
AFTER INSERT ON build
BEGIN
IF ((SELECT * FROM build WHERE ORDER BY ID DESC LIMIT 1) EXISTS (SELECT * FROM processor_products pp, motherboard m where pp.Socket <> m.Socket))
THEN
INSERT INTO compatibility(compatibility) VALUE('no');
ELSE
INSERT INTO compatibility(compatibility) VALUE('yes');
END IF;
END
我正在使用 phpmyadmin,错误是我的语法错误。
1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在“BEGIN”附近使用的正确语法 IF ((SELECT * FROM build WHERE ORDER BY ID DESC LIMIT 1) EXISTS (SELECT *' at line 3
有人可以帮我吗?
表格:
Build table = https://i.stack.imgur.com/wxviV.png
Motherboard = https://i.stack.imgur.com/7YNAo.png
Processors = https://i.stack.imgur.com/HOVjU.png
【问题讨论】:
-
乍一看,感觉/接缝就像丢失了
DELIMITER,但没有检查其他语法错误或不合逻辑的错误.. -
非常确定 phpmyadmin(正确的是 mysql)告诉您错误是什么...想与我们分享错误信息吗?
-
添加后仍然出现语法错误。我已经用错误消息编辑了我的问题。
-
" 添加后我仍然遇到语法错误。我已经用错误消息编辑了我的问题。" 简而言之,触发代码是一团糟
FOR EACH ROW接缝是缺少 .. 还使用了SELECT * FROM build WHERE ORDER BY而没有有效的WHERE条件 .. 就像我说的,我没有检查其他语法问题 -
.. 另请参阅Why should I provide a Minimal Reproducible Example for a very simple SQL query?,因为您的触发代码取决于现有的表和数据..