我写了这个简单的命令来测试删除命令,但发现它有一些不符之处:
delete table1 from table1,table2
where table1.col1 = table2.col1
and table1.col2= table2.col2
在table1中我有272768行,table2我有1380行。现在我需要从table1中删除table2中可用的这1380行。但令我惊讶的是,它在运行上述脚本后从table1中删除了2234行。预期的删除应该只有1380行。有什么我可以做的来优化这个吗?
答案 0 :(得分:1)
尝试这种方式:
delete from table1
from table2
where table1.col1 = table2.col1
and table1.col2= table2.col2
或
delete from table1
where exists
(
select 1
from table2
where table1.col1 = table2.col1
and table1.col2= table2.col2
)
答案 1 :(得分:0)
如果您运行查询:
SELECT COUNT(*)
FROM table1 JOIN table2
ON table1.col1 = table2.col1 AND table1.col2 = table2.col2
您会发现table2
中的1380行与table1
中的2234行相匹配,因此DELETE正在执行它应该执行的操作。
该查询是首选形式;你可以在没有明确连接的情况下使用过时的表示法:
SELECT COUNT(*)
FROM table1, table2
WHERE table1.col1 = table2.col1 AND table1.col2 = table2.col2
但是你应该在你写的任何东西中使用显式的JOIN表示法;你应该只需要知道FROM子句中用逗号分隔的列表来理解在另一个千年中写的旧查询。