我有一种情况需要确定给定用户记录中最多20个不同列中的一个是否存在单个值,但它们不是位置特定的。 因此,每个用户都有一个或多个他们负责维护的应用程序,当输入特定应用程序时,查询将查找用户记录中该应用程序值的所有20列。 我不想做的是这样的事情:
Select * from users u
where
u.app1 = 'appl1' or u.app2 = 'appl1' or u.app3 = 'appl1' or... u.app20 = 'appl1'
有没有办法将where子句简化为
之类的东西where u.app* = 'appl1'
答案 0 :(得分:1)
不,你不能那样简化where
条款。但是,您可以使用in
:
Select *
from users u
where 'appl1' in (u.app1, u.app2, u.app3, . . . u.app20)
通常,这种重复的列是糟糕的数据库设计的一个例子。您应该有另一个表,每个用户/应用程序组合有一行(比如UserApps
)。使用这样的表,您的查询会更简单。