2013-07-18 92 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,你撞在了頭上!這是確切的情況! –