如何以View为数据源编写SQL删除Table中存在匹配的行
解决方案
你可以根据你使用的数据库类型选择对应的SQL写法,以下几种是最常用的实现方式:
1. 全数据库兼容写法(推荐)
使用EXISTS关键字匹配,所有主流关系型数据库(MySQL、PostgreSQL、SQL Server、Oracle、SQLite等)都支持该语法:
DELETE FROM table1 WHERE EXISTS ( SELECT 1 FROM view1 WHERE view1.column1 = table1.column1 AND view1.column2 = table1.column2 AND view1.column3 = table1.column3 );
2. MySQL专属多表删除写法
DELETE table1 FROM table1 INNER JOIN view1 ON table1.column1 = view1.column1 AND table1.column2 = view1.column2 AND table1.column3 = view1.column3;
3. PostgreSQL/SQLite专属写法
DELETE FROM table1 USING view1 WHERE table1.column1 = view1.column1 AND table1.column2 = view1.column2 AND table1.column3 = view1.column3;
注意事项
执行删除操作前强烈建议先运行查询语句确认要删除的行符合预期,避免误删数据:
SELECT * FROM table1 WHERE EXISTS ( SELECT 1 FROM view1 WHERE view1.column1 = table1.column1 AND view1.column2 = table1.column2 AND view1.column3 = table1.column3 );
上述查询返回的就是即将被删除的行,确认结果无误后再执行删除语句即可。
内容的提问来源于stack exchange,提问作者suriel
相关产品推荐
相关产品推荐

