当前位置: 首页 > 知识库问答 >
问题:

在JDBC中使用SQL查询的WHERE条件中多次使用同一个参数

杜元明
2023-03-14

我想通过JDBC向Oracle DB发送一个准备好的语句SQL查询,如下所示:

SELECT * FROM mytable WHERE col1 = <ONEVAL> col2 = <ONEVAL> AND col3 = <ONEVAL>;
SELECT * FROM mytable WHERE col1 = ? AND col2 = ? AND col3 = ?;

只有在我提供 3次时才起作用,但我不想这样做,我更希望调整准备好的语句的SQL,以便只使用一个但将其应用于所有where条件。类似于

WITH VAl = ? SELECT * FROM mytable WHERE col1 = VAL AND col2 = VAL AND col3 = VAL;

但这种尝试似乎并不奏效。有没有办法在SQL字符串中多次使用一个准备好的语句参数?

在@selvin的善意建议之后,我为准备好的语句使用了以下SQL字符串:

DECLARE val varchar(30) :=? ; SELECT * FROM mytable WHERE col1=&val AND col2=&val AND col3=&val

然后,我得到错误“ORA-06550:第1行,第33列:PLS-00103:当需要以下内容之一时遇到符号”SELECT“:[...]”

共有1个答案

吴刚毅
2023-03-14

如果我没搞错的话,您需要所有三列同时等于同一个值,所以我的猜测是这些SQL会对您有所帮助

SELECT * FROM mytable WHERE col1 = ? AND col1 = col2 AND col1 = col3;

UPD:有一个更好的或者我会说更紧凑的想法

SELECT * FROM mytable WHERE ? = all(col1, col2, col3)
 类似资料:
  • 问题内容: 我正在创建一个SQL查询,该查询将基于两个聚合函数的值从表中提取记录。这些聚合函数从同一张表中提取数据,但过滤条件不同。我遇到的问题是,与仅包含一个SUM函数的情况相比,SUM的结果要大得多。我知道我可以使用临时表创建此查询,但是我只是想知道是否有一个仅需要单个查询的优雅解决方案。 我创建了一个简化版本来演示该问题。表结构如下: 这是查询: 任何见识将不胜感激。 问题答案: 编辑: 没

  • 问题内容: 我想知道这在sql(使用php作为服务器端)中实际上可行,在其中您有一个值数组(数字),然后尝试根据该数组中的值检索数据。 我有一个SQL表: 我现在写一个查询来检索“帖子”: 是否有任何sql内置函数来检查数组中的值?还是应该为此使用PHP? 我实际上是在尝试实现Twitter模式,以显示我们关注的人的帖子。 问题答案: SQL无法解析PHP数组。试试这个:

  • 我的SQL有这些表: ___BookingsDatas ___预订 _ _ _客户 我想链接这些表,所以我有这个查询: 它实际上起作用了。 问题是在第二个表上,我有一些信息需要与第三个表链接。 例如,我需要有以下结果: 那么,在这种情况下,如何在另一个where语句中使用第一个mysql查询的结果? 谢谢。

  • 问题内容: 如何将这些多个查询合并为一个(可以吗?) 顺便问一下,如果在完成所有查询后再执行mysql_close($ db),那会更好吗? 问题答案: 传递到作为第五个参数。 例: 当您使用mysql_fetch_ *或mysql_num_rows或mysql_affected_rows时,仅第一条语句有效。 例如,以下代码,第一个语句为INSERT,则无法执行mysql_num_rows和my

  • 我有一个问题与mybatis注释查询以下错误。 组织。阿帕奇。伊巴蒂斯。结合BindingException:未找到参数“strDateStart”。可用参数为[0,1,param1,param2] 下面是mapper类中的代码。 与query中的参数和method中的args使用相同的名称,我可以在具有相同参数的条件中多次使用吗?

  • 问题内容: 我有一个包含多个CTE的相当复杂的查询,但是其他人都从中提取了1个主要CTE,这是否会导致该主要CTE多次执行? 问题答案: 您可以这样使用CROSS JOIN: 这将防止的多次执行(有关实际执行计划,请参见属性)。 示例:如果执行此查询 使用数据库,那么实际的执行计划将是