SQL ステートメントはあまり得意ではありませんが、知りたいことについて知りたいです。
「y」または「n」値を保持する「可視」列を想像してください。目的の行を「y」に設定する前に、このテーブルをすべての行の「n」値に更新する事前クエリを起動せずに、単一の「y」のみを持つことは可能ですか?
前もって感謝します。
ID 123 の行を表示するように設定する場合は、次のようにします。最初のクエリは、すべての行を更新するのではなく、既に Y に設定されている行のみを更新します。
update MyTable set Visible = 'N' where
Visible = 'Y';
update MyTable set Visible = 'Y' where
ID = 123;
もう 1 つの方法は、Visible をフラグにするのではなく、VisibleDate 列にすることです。次に、その列を表示する行の現在の日付に設定します。次に、現在表示されている行を特定するために、VisibleDate 列から最大日付を選択して行を見つけます。
あなたがしていることに対して別のアプローチを検討するかもしれません。テーブルに id と呼ばれる主キー (必要) があるとします。
Visible というテーブルを作成します。
create table Visible (id int)
これで、次のクエリでフラグを作成できます。
select t.*, (case when v.id is not null then 'Y' else 'N' end) as VisibleFlag
from table t left outer join
Visible v
on t.id = v.id
このクエリをビューにラップして、他のコーディングを簡素化できます。
これにより、他の行に影響を与えることなく、1 つの行を表示に設定することができます。主キーを使用したテーブル内の 1 つの行の検索は高速な操作であるため、パフォーマンスは非常に優れているはずです。他のタイプのフラグにも同様のテーブルを使用できますが、各行でフラグの名前を指定する必要があります。