如何操作SQL IN运算符以返回所有值作为结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何操作SQL IN运算符以返回所有值作为结果相关的知识,希望对你有一定的参考价值。

我正在研究Java代码,其唯一目的是显示数据库表中的所有数据。

用于从数据库中获取表数据的查询是在jar中编写的。

表结构有点像:

Column1  Column2  City 
Dummy    Dummy    abc
Dummy    Dummy    xyz
Dummy    Dummy    pqr
Dummy    Dummy    ALL

以前,jar中的sql命令看起来像这样:

  select * from table;

但是现在在较新版本的jar中,查询就像:

select * 
from table 
where city In ( variable ,'All');

该变量在运行时填充,是一个字符串变量。

现在的问题是,我对罐子没有任何控制,我无法更改其中的任何内容。

而且我的目标仍然是在表中显示所有内容。**

我尝试在命令中放入' '(空白),但只返回city为ALL的行。

所以有什么方法可以使用in运算符来获取所有行的结果,或者我应该返回具有简单选择查询的上一个jar。

答案

这里您可以在查询中传递动态或运行时值。

DECLARE @ParameterDefinition NVARCHAR(MAX) 
 SET @ParameterDefinition = '@P_Filter NVARCHAR(MAX)';

DECLARE @SQL  NVARCHAR(MAX);
DECLARE @Filter  NVARCHAR(MAX) = '' //set here filter value

SET  @SQL = 'select * from table where city In (@P_Filter);'

EXECUTE sp_executesql @SQL, @ParameterDefinition,
@P_Filter = @Filter

或使用STRING_SPLIT Function

传递值
select * from table where city In (STRING_SPLIT([FILTER_VALUE]));

有关更多详细信息,请访问此链接Click me

另一答案

尝试一下:

 select * 
 from table 
 where city in (select city from table)
另一答案

使用case语句或mysql if函数检查variable是否为空

select * from table where city In (if(length(variable) > 0, city , ''), 'All');
另一答案

这将与SQL Server一起使用:

 select * 
 from table 
 where city In ( city ,'All');

DEMO

并且在ORACLE DEMO中>

因此,如果可能的话,您只需要发送城市专栏

以上是关于如何操作SQL IN运算符以返回所有值作为结果的主要内容,如果未能解决你的问题,请参考以下文章

[讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)

如何在 Tedious 中运行 sql 查询,为 sql in 运算符提供多个值?

SQL NOT EXIST 在查询结果中返回重复值

SQL NOT EXIST在查询结果中返回重复值

sql提示子查询返回的值不止一个,求解如何修改,谢谢。

如何按 Oracle SQL IN() 子句中的值顺序对结果数据进行排序