Sybase Delete命令无法按预期工作

时间:2013-03-06 13:54:43

标签: sybase

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

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行。有什么我可以做的来优化这个吗?

2 个答案:

答案 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子句中用逗号分隔的列表来理解在另一个千年中写的旧查询。