我正在尝试编写一个具有可选输入参数的查询。如果参数为空,我必须从表中选择每个记录。如果参数不为空,我只需要按其中提供的值进行过滤。我的想法是使用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
)
答案 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))