sql可选条件

enyaitl3  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(398)

我正在使用microsoft report builder 3.0创建报表。我想在where子句中添加一个附加条件,该条件依赖于布尔参数@param。在编程中,添加sql字符串很容易:

String sql = "SELECT * FROM tblA WHERE tblA.columnA = 'data' ";
if(param)
{
    sql += "AND tblA.columnB IN (SELECT column FROM tbl)";
}

但如何在纯sql查询中做到这一点呢?我试着使用case,但似乎不是这样。这就是我尝试过的:

SELECT * FROM tblA 
WHERE tblA.columnA = 'data'
CASE @param WHEN 1 THEN AND tblA.columnB IN (SELECT column FROM tbl) END
pw136qt2

pw136qt21#

SELECT * FROM [tblA] WHERE tblA.columnA = 'data' AND 
    (@param <> 1 OR columnB IN (SELECT column FROM tbl)).

简而言之,可选条件可以放在或条件中,并带有要验证的标志。假设您在名为@name和@dept的过程中传递了参数,并且您希望检索指定部门中提到名称的所有结果或提到名称的结果,那么您可以将其编写为

SELECT * FROM [Employees] WHERE Name = @name AND (Department = @dept OR @dept = 0)
2vuwiymt

2vuwiymt2#

只需使用涉及参数的逻辑:

SELECT *
FROM tblA
WHERE
    columnA = 'data' AND
    (!param OR columnB IN (SELECT column FROM tbl));

这个 WHERE 如果 columnA 包含 data ,并且要么将参数设置为false,要么将参数设置为true,子查询将成功。

4szc88ey

4szc88ey3#

param 是在客户端设置的,所以您需要在客户端进行查询,您可以使用case query来实现这一点,如下所示

String sql = "SELECT * FROM tblA 
           WHERE tblA.columnA = 'data' 
           AND CASE " +param+ "
               WHEN 1 THEN tblA.columnB IN (SELECT column FROM tbl) 
              ELSE 1 
           END";

我希望能成功

相关问题