2013-07-18 54 views
-1

我有一种情况,需要确定某个给定用户记录的最多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' 
+2

您是否设计了这张桌子?如果你这样做,请阅读正常化原则。你**不应该**有20列 – Kermit

+0

FreshPrince - 不,我没有,并完全同意你的评估。 –

回答

1

不,你不能简化where条款的方式。然而,你可以使用in

Select * 
from users u 
where 'appl1' in (u.app1, u.app2, u.app3, . . . u.app20) 

一般情况下,这样的重复列的数据库设计的不好的例子。你应该有另一个表,每个用户/应用程序组合有一行(如UserApps)。用这样的表格,你的查询将会简单得多。

+0

可能是传统系统的一个例子,任何决定设计的人都会做出糟糕的工作。我一直坚持保持这样的系统,并相信我没有乐趣。 – user2366842

+0

谢谢 - 这对我很有用。我感谢帮助! –

+0

user2366842,你撞在了头上!这是确切的情况! –