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

最初のクエリの行を使用してビューを作成し、次に2番目のテーブルの行を使用してビューをスキャンすることを考えていました。いくつかの条件が一致する場合は、2番目のテーブルから行を削除します。

これをどのように行うことができるかについて、いくつかの指針を得ることができますか?私がしていることが何か間違っているなら、批判してください。

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 に答える