WHERE子句

时间:2017-07-19 12:00:27

标签: sql

我正在尝试编写一个具有可选输入参数的查询。如果参数为空,我必须从表中选择每个记录。如果参数不为空,我只需要按其中提供的值进行过滤。我的想法是使用CASE语句但由于某种原因,无论我在@list变量中放置什么,我总是得到空结果集。有更好的想法吗?

SELECT * FROM my_tables
WHERE column_one IN (
    CASE
        WHEN LEN(@list) > 0 THEN @list
        ELSE (SELECT column_one FROM my_table) END
)

2 个答案:

答案 0 :(得分:1)

为两个案例和UNION编写2个不同的SQL。只有一个查询将提供结果,另一个查询将始终提供空结果集。像这样:

JDK Serialization

答案 1 :(得分:0)

试试这段代码:

SELECT * FROM my_tables
WHERE 
    (LEN(@list) > 0 AND column_one = @list)
    OR (LEN(@list) = 0 AND column_one IN (SELECT column_one FROM my_table))