0

我写了这个简单的命令来测试删除命令,但发现它有一些差异:

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 行。我能做些什么来优化它吗?

4

2 回答 2

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

) 
于 2013-03-06T13:58:14.250 回答
0

如果您运行查询:

SELECT COUNT(*)
  FROM table1 JOIN table2
    ON table1.col1 = table2.col1 AND table1.col2 = table2.col2

你会发现 1380 行table2匹配 2234 行table1,所以 DELETE 正在做它应该做的事情。

该查询是首选形式;您可以在没有显式连接的情况下使用过时的表示法:

SELECT COUNT(*)
  FROM table1, table2
 WHERE table1.col1 = table2.col1 AND table1.col2 = table2.col2

但是你应该在你写的任何东西中使用显式的 JOIN 表示法;您只需要了解 FROM 子句中的逗号分隔列表,就可以理解另一个千年编写的旧查询。

于 2013-03-06T14:59:35.640 回答