我对 SQL 语句不是很擅长,但我想知道一件我愿意知道的事情。
想象一个包含“y”或“n”值的“可见”列。在将所需行设置为“y”之前,是否可以只有一个“y”而不启动将所有行的该表更新为“n”值的预查询?
提前致谢。
假设您要将 ID 为 123 的行设置为可见,您可以执行以下操作。第一个查询不会更新所有行,只会更新已设置为 Y 的行:
update MyTable set Visible = 'N' where
Visible = 'Y';
update MyTable set Visible = 'Y' where
ID = 123;
另一种方法是,与其将 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
您可以将此查询包装在视图中,以简化其他编码。
这使您能够将一行设置为可见,而不会影响其他行。性能应该是相当不错的,因为在表中查找一行,使用主键是一个快速的操作。您也可以将类似的表用于其他类型的标志,但您必须在每一行中指定标志的名称。