0

delete コマンドをテストするために次の簡単なコマンドを書きましたが、いくつかの不一致が見つかりました。

delete table1 from table1,table2
where table1.col1 = table2.col1
and table1.col2= table2.col2

table1 には 272768 行、table2 には 1380 行あります。ここで、table2 で使用可能なこれらの 1380 行を table1 から削除する必要があります。しかし驚いたことに、上記のスクリプトを実行した後、table1 から 2234 行が削除されました。予想される削除は、1380 行のみである必要があります。これを最適化するためにできることはありますか?

4

2 に答える 2

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

) 
于 2013-03-06T13:58:14.250 に答える
0

クエリを実行すると:

SELECT COUNT(*)
  FROM table1 JOIN table2
    ON table1.col1 = table2.col1 AND table1.col2 = table2.col2

table2の 1380 行が の2234 行と一致することがわかりますtable1。したがって、DELETE は本来行うべきことを正確に行っています。

そのクエリが推奨される形式です。明示的な結合なしで時代遅れの表記法を使用できます。

SELECT COUNT(*)
  FROM table1, table2
 WHERE table1.col1 = table2.col1 AND table1.col2 = table2.col2

しかし、何を書くにも明示的な JOIN 表記を使用する必要があります。FROM 句のコンマ区切りリストについて知っておくだけで、別の千年紀に書かれた古いクエリを理解できます。

于 2013-03-06T14:59:35.640 に答える