我想要执行的查询:
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。
感谢。
答案 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'