删除并加入,然后设置一列

时间:2013-11-04 01:28:38

标签: mysql sql database

我想在同一个Mysql查询中更新两个表,第一个名为tags,第二个名为links

标签表如下:

CREATE TABLE `tags` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`last_modified` datetime DEFAULT NULL,
`name` text,
`title` text,
`use_number` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
);

链接表如下所示:

CREATE TABLE `links` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `entry_id` int(11) DEFAULT NULL,
  `tag_id` int(11) DEFAULT NULL,
  `start_pos` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);

如果有links.entry_id,我想删除links表格中的所有相关行,然后加入links.tag_idtags.id,减少关联的tags.use_number由1。

我尝试进行查询,但显然无效。

DELETE FROM links INNER JOIN tags ON links.tag_id = tags.id AND entry_id = ? SET tags.use_number = tags.use_number - 1;

提前致谢!

1 个答案:

答案 0 :(得分:4)

这不是DELETE语句的有效语法。

您无法更新DELETE查询中的表格。

你可以做的是创建一个trigger before delete来更新你的代码表,方法是将关联的tags.use_number减少1 WHERE tags.id = OLD.tag_id

CREATE TRIGGER decrease_tags_use_number BEFORE DELETE ON links
  FOR EACH ROW BEGIN
    UPDATE tags SET use_number = use_number - 1 WHERE id = OLD.tag_id;
  END;