Sql 选择包含特定值的多列
我有一个大表,我在其中选择了一些id在(321900123)中的行 我想回去 col1和col3,因为它们包含1。怎样 我正在对select语句应用union,这是一种缓慢的方法。一定有更好的办法。我将来可能会有更多的专栏,所以这种硬编码并不好Sql 选择包含特定值的多列,sql,sql-server,Sql,Sql Server,我有一个大表,我在其中选择了一些id在(321900123)中的行 我想回去 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 col
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
一种方法是将两列相加,因为它们是数值:
select col1+col3 as selected
from tab
where id in (321,900,123)
and col1+col3>=1
但这里面确实有一些假设。根据您的要求,它可能适合您。(遗憾的是,sql server不允许在where
子句中使用列别名,因为它最好读作并选择>=1
)
另一种方法是执行以下操作:
select 1
from tab
where id in (321,900,123)
and ( col1=1
or col3=1 )
但同样取决于您的具体要求您是否尝试将命令连接为字符串和
EXEC(@command)
?因此我将使用相同的命令?@waterling-您能告诉我这是一个玩具项目还是来自某个公司的数据库吗?我想知道为什么会有人想提出这样的疑问。顺便说一句,你为什么认为这很慢?我只是想设置一些权限。此表告诉我id是否对每个列都有权限:)这很慢,因为您正在执行单独的select语句并组合结果,而不是执行一个。您希望从查询中获得什么输出?您提供的查询将包含零行或一行,其中一列名为col1
,其中包含1
。无论您在表中输入了什么数据,该查询都不会产生其他结果。我认为这不是你想要的。
select 1
from tab
where id in (321,900,123)
and ( col1=1
or col3=1 )