SQL:如何从视图中删除表中的所有行?

时间:2012-08-07 13:47:59

标签: sql sybase

我想要执行的查询:

BEGIN TRANSACTION

   INSERT INTO TABLE_B SELECT * FROM TABLE_A WHERE SOME_COLUMN = 'something'

   DELETE FROM TABLE_A WHERE COLUMN IN (
     SELECT * FROM TABLE_A WHERE SOME_COLUMN = 'something'
   )


END TRANSACTION

如您所见,SELECT查询中有一个冗余的DELETE语句,我想替换(如果可能),从而提高效率。

我正在考虑使用第一个查询中的行创建一个View,然后使用第二个表中的行扫描View。如果某些条件匹配,则从第二个表中删除该行。

我能否就如何做到这一点得到一些指示?如果我有什么问题,请批评。

我正在使用Sybase。

感谢。

2 个答案:

答案 0 :(得分:1)

这就是你想要的,我想:

delete from table_a
where some_column = 'something'

如上所述,您的查询可能会生成语法错误。 “SELECT *”将返回table_a中的所有列,并且它可能包含多个列。

答案 1 :(得分:0)

通常,您应该能够在delete语句中进行联接,但是您需要指定要从中删除行的表:

delete table_a 
  from table_a left join table_b on (table_a.column_a = table_b.column_b)
 where table_b.column_b = 'some_value'