1

MySQL テーブルの値を更新しようとしていますが、本当に行き詰っています。

基本的に、列の値を1に更新したいのですが、別の列(同じ行) = "N"です。それは非常に単純なはずですが、私には理解できません。

UPDATE household SET allowsDogs=1 WHERE allowsCats="N"

私の考えでは、上記のクエリは、各世帯に対して、allowsCats="N" の場合、allowsDogs を 1 に設定する必要があります。しかし、代わりに空の結果セットが得られます。

バリエーションも試しました:

Update household  set allowsDogs=1 where householdID in (select householdID from household where allowsCats="N") 

Update household  set allowsDogs=1 where householdID in (select householdID from copy_of_household where copy_of_household.allowsCats="N")

各行を読み取り、一度に 1 つずつ更新する php スクリプトを作成しようとしています....しかし、もっと簡単な方法があるはずです...

4

3 に答える 3

2

おそらく、次のいずれかを意味します。

UPDATE household
    SET allowsDogs = 1
    WHERE allowsCats = 0;

また

UPDATE household
    SET allowsDogs = 'Y'
    WHERE allowsCats = 'N';

旗に数字と文字を混ぜるのは、猫と犬を混ぜるようなものです。

于 2013-09-09T17:39:53.143 に答える
0

最初のクエリは正しいですが、結果セットは返されません。

結果を表示するには、別のSELECT * FROM householdステートメントを使用します。

于 2013-09-09T17:36:22.037 に答える
0

指定した構文は正しく、動作するはずです。これがあなたがつまずいているところだと思います:

しかし、代わりに空の結果セットが得られます。

UPDATEクエリは結果セットを返しません。彼らは自分の仕事をしてから、空の結果セットを返します。ただし、クライアント ライブラリまたはアプリケーションは、変更されたレコードの数を確認する方法を提供する必要があります (ただし、どのレコードが変更されたかはわかりません)。

さらに、更新しているすべてのフィールドに割り当てようとしている新しい値がすでにある場合、データベース サーバーはレコードの更新をスキップする可能性があることに注意してください。たとえば、フィールドが等しいテーブル内のすべてのレコードのフィールドallowCatsも等しい"N"場合allowDogs1実際には変更されていないため、データベース サーバはそれらの行を更新された行の総数に含めない場合があります。

于 2013-09-09T17:36:31.937 に答える