2

MySQL で、一致するすべてのフィールドを連続して新しい値で一度に更新できるかどうか知りたいです。

を使用してデフォルト値を変更できることはわかってALTER TABLEいますが、テーブル全体のデフォルト値を変更するのではなく、1 つの行だけに関心があります。必要に応じて、ループ内でそれぞれを反復処理できますが、これをよりエレガントに実現する方法があるかどうかに興味があります。

行が次のようになっていると想像してください。

| 1 | Joe | Smith | null | X | X | X | Y | X | Y | Y | X | null | Y | X | null |

Xに一致するすべてのフィールドYを一度に更新することは可能ですか?

したがって、結果は次のようになります。

| 1 | Joe | Smith | null | Y | Y | Y | Y | Y | Y | Y | Y | null | Y | Y | null |

1(主キー、IDであると仮定します...それがまったく役立つ場合)

UPDATEこれは 1 つのクエリだけで実行できますか?

4

1 に答える 1

5

これにより、すべての列の値が「x」の場合は「y」に変更され、それ以外の場合は変更されません。

update mytable set
col1 = if(col1 = 'x', 'y', col1),
col2 = if(col2 = 'x', 'y', col2),
col3 = if(col3 = 'x', 'y', col3),
...
where id = ?;

実際には、それ以外の場合は元の値に更新しますが、意味的には変更しないままにしておくことと同じであり、mysql では同じです (つまり、「更新」としてカウントされません)。

于 2012-11-01T04:19:51.577 に答える