我有一张大表,我在其中选择了一些id为(321,900,123)
的行id | col1 | col2 | col3
-----------------------
321| 1 | 0 | 0
900| 0 | 0 | 0
123| 0 | 0 | 1
我想回来 col1和col3因为它们包含1.如何? 我在select语句上应用union的方法很慢。肯定有更好的办法。我将来可能会有更多列,所以这种硬编码并不好。
select col1 from table where id in (321,900,123) and col1=1
union select col2 from table where id in (321,900,123) and col2=1
union select col3 from table where id in (321,900,123) and col3=1
答案 0 :(得分:0)
解决这个问题的一种方法是将数字值相加:
select col1+col3 as selected
from tab
where id in (321,900,123)
and col1+col3>=1
但这确实有一些内置的假设。根据您的要求,它可能适合您。 Fiddle。 (Pity sql server不允许在where
子句中使用列别名,因为它会更好地读取and selected>=1
。)
另一种方法是做一些事情:
select 1
from tab
where id in (321,900,123)
and ( col1=1
or col3=1 )
但又取决于你的确切要求