在DBeaver中使用SQL删除两表数据时遭遇语法错误的问题
问题分析与解决方案
你的SQL语句报错是因为DELETE JOIN的语法顺序错误,正确的逻辑应该是先指定要删除的目标表,再从该目标表出发关联其他表,而不是把关联表放在FROM后的第一个位置。
场景1:仅删除books表中符合条件的数据
如果你的需求是删除books里匹配条件的记录,使用以下适配MySQL、SQL Server等主流数据库的写法:
DELETE b1 FROM books b1 JOIN price p1 ON b1.BOOK_ID = p1.ID WHERE p1.ISBN IS NOT NULL AND p1.VALUTA = 'yen' AND b1.YEAR BETWEEN 2011 AND 2014
场景2:同时删除books和price表中符合条件的数据
如果需要同步删除两张表的匹配记录,仅部分数据库(如MySQL)支持这种写法,语句如下:
DELETE b1, p1 FROM books b1 JOIN price p1 ON b1.BOOK_ID = p1.ID WHERE p1.ISBN IS NOT NULL AND p1.VALUTA = 'yen' AND b1.YEAR BETWEEN 2011 AND 2014
错误原因说明
你原语句中DELETE books FROM price p1 JOIN books b1的写法逻辑颠倒了:数据库需要先明确要操作的主表(books),再通过JOIN关联price表筛选条件,而不是反过来把关联表放在FROM开头,这就导致了语法解析错误。
内容的提问来源于stack exchange,提问作者melkor
相关产品推荐
相关产品推荐

