2

我有两个要在同一个 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`)
);

给定 a links.entry_id,我想删除links表中所有关联的行,然后加入links.tag_idand tags.id,将关联的行减少tags.use_number1。

我试图提出一个可以做到这一点的查询,但它显然无效。

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

提前致谢!

4

1 回答 1

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;
于 2013-11-04T01:37:26.307 回答