0

我想执行的查询:

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我想替换(如果可能),从而提高效率。

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

我能得到一些关于如何做到这一点的指示吗?如果我做错了什么,请批评。

我正在使用 Sybase。

谢谢。

4

2 回答 2

1

这就是你想要的,我认为:

delete from table_a
where some_column = 'something'

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

于 2012-08-07T13:54:16.257 回答
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'
于 2012-08-07T14:03:18.343 回答