0

別のテーブルの一致するレコードが変更された場合にテーブルのレコードの値を変更する更新手順を作成しましたが、更新できるフィールドが12個ある場合でも、その設定方法は、1つのフィールドのみが変更された場合でも、プロシージャはそれらすべてを更新します

これは非効率的であるため、1つのレコードに約50秒かかります。数百のレコードがある場合は良くありません。これについては、擬似コードを十分に簡単に考えました。

if olddata != newdata

    UPDATE!!!

endif

SQLのifステートメントの経験がほとんどないかまったくないということです。PHPで作業できる場合は、上記のifステートメントのようにWHERE句を指定してSELECTを実行し、返された行数を確認するだけで簡単になります( 0の場合、変更はありません)が、プロシージャはSQLだけである必要があります。私が思いつくことができる最善の方法は、これです。

IF(SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field) != 0

     UPDATE!!!

ENDIF

しかし、SELECTが行数を返さないと確信しているので、うまくいくとは思えません。このように機能するifステートメントを作成するにはどうすればよいですか。

4

2 に答える 2

3

何を更新しているのか完全にはわかりませんが、これを1つのステートメントで実行し、IFをWHERE句に組み込む方がはるかに優れています。

UPDATE updatetable u
   SET ... something ...
 WHERE EXISTS ( SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ... )

しかし、同じフィールドを2つのテーブルに格納している場合、これがテーブルに最適なデータベース設計であると確信していますか?

于 2012-08-23T03:35:22.860 に答える
2

基準を満たす行が存在するかどうかを知りたい場合は、EXISTS句を使用できます。

-- If the original table doesn't have a record with the state same as that in updatetable
IF NOT EXISTS (SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field)
BEGIN

    UPDATE !!!

END

お役に立てれば。

于 2012-08-23T02:30:07.187 に答える