我想知道为什么这个查询有效:
DELETE `temp` FROM `tagged` `temp`
INNER JOIN `tags`
ON
(`tags`.`id` = `temp`.`tag_id` AND `temp`.`user_id` = '1' AND `tags`.`name` = 'tag1')
OR
(`tags`.`id` = `temp`.`tag_id` AND `temp`.`user_id` = '1' AND `tags`.`name` = 'tag2');
这个查询,唯一的区别是没有temp
作为tagged
表的别名。
DELETE FROM `tagged`
INNER JOIN `tags`
ON
(`tags`.`id` = `tagged`.`tag_id` AND `tagged`.`user_id` = '1' AND `tags`.`name` = 'tag1')
OR
(`tags`.`id` = `tagged`.`tag_id` AND `tagged`.`user_id` = '1' AND `tags`.`name` = 'tag2');
第二个查询只会产生语法错误。另外,请重新编写可行的查询,并且不需要别名。
语法错误:
语法错误或访问冲突:1064 SQL语法中出错;检查与您的MySQL服务器版本相对应的手册,以便在
tags
附近使用正确的语法tags
。id
=tagged
。{{ 1}}和tag_id
。tagged
=''在第1行(SQL:DELETE FROMuser_id
INNER JOINtagged
ON({{1} }。tags
=tags
。id
和tagged
。tag_id
=' 2'和tagged
。{{1 }} =' tag1')或(user_id
。tags
=name
。tags
和id
。tagged
= ' 2'和tag_id
。tagged
=' tag2');)
答案 0 :(得分:0)
您只需要在DELETE
语句之后添加要删除的表名。
DELETE `tagged` FROM `tagged`
INNER JOIN `tags`
ON
(`tags`.`id` = `tagged`.`tag_id` AND `tagged`.`user_id` = '1' AND `tags`.`name` = 'tag1')
OR
(`tags`.`id` = `tagged`.`tag_id` AND `tagged`.`user_id` = '1' AND `tags`.`name` = 'tag2');