sql语句的查询问题

DECLARE @A INT;
SET @A = 0;
SELECT * FROM dbo.Table WHERE (a IN (1,2) AND a= @A) OR a= @A

我希望改成
传入a = 0的时候,查询a in (1,2)
传入a = 1的时候,查询a = 1
传入a = 2的时候,查询a = 2
请问能否实现。

阅读 2.8k
2 个回答

其实很简单,提问的时候已经接近写对了……

DECLARE @A INT;
SET @A = 0;
SELECT * FROM dbo.Table WHERE (a IN (1,2) AND @A = 0) OR a = @A

当然是可以的:

SET @A = 0;
SELECT * FROM dbo.Table WHERE IF(@A!=0, a=@A, a IN (1,2));

不过并不建议将此类判断交给数据库执行,最好是通过PHP、JAVA构造好了之后,直接让数据库给出结果(效率考虑)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进