在where语句中使用子查询

时间:2013-02-21 21:24:11

标签: sql sql-server

我的存储过程存在问题。

一般的想法是能够选择4个参数(可以选择或不选择)并返回正确的结果。因为我真的不能使用2个参数(校园ID是强制性的),我没有费心去做其他的。

问题在于我的where子句

       WHERE ac.AC_Campus_ID = @CampusID AND
          (

                ac.AC_College_ID IN (CASE @CollegeID
                WHEN 0 THEN (select distinct AC_College_ID from AC_Academic_Choice)
                ELSE @CollegeID
                END))

这是一个例子。我选择校园ID为1,我选择了大学ID为1.查询将返回这两个参数的结果。

当我选择校园ID为1且大学ID为0时,我得到“子查询返回的值超过1。当子查询跟随=,!=,<,< =,&gt时,不允许这样做;,> =或当子查询用作表达式时。“

当我做第二次输入时,我想要系统中每个大学id的所有结果。

有关如何使其发挥作用的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:3)

这是重写它以获得所需结果的一种方法:

...
WHERE ac.AC_College_ID IN (
  SELECT DISTINCT AC_College_ID 
  FROM AC_Academic_Choice
  WHERE AC_College_ID = 
    CASE @CollegeID
      WHEN 0
      THEN AC_College_ID 
      ELSE @CollegeID 
    END
)

答案 1 :(得分:0)

尝试:

   WHERE ac.AC_Campus_ID = @CampusID AND
      (SELECT 1 WHERE ac.AC_College_ID IN 
            (CASE @CollegeID
            WHEN 0 THEN (select distinct AC_College_ID from AC_Academic_Choice)
            ELSE @CollegeID
            END
            )
      )