首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有单个匹配条件的sql查询中的OR子句

具有单个匹配条件的sql查询中的OR子句
EN

Stack Overflow用户
提问于 2017-09-18 16:34:15
回答 3查看 38关注 0票数 0

我是否可以在oracle中使用OR claue和下面的代码片段(?是一个输入参数):

代码语言:javascript
复制
Select t1.name, t1.value from table t1 where t1.name ='abc' and (t1.col OR 
t1.value =? );
EN

回答 3

Stack Overflow用户

发布于 2017-09-18 16:57:31

为此,您可以使用IN子句:

代码语言:javascript
复制
Select t1.name, t1.value 
from table t1 
where t1.name = 'abc' 
  and ? in (t1.col, t1.value);
票数 1
EN

Stack Overflow用户

发布于 2017-09-18 16:57:53

有几种方法可以做到这一点:

使用IN子句:

代码语言:javascript
复制
SELECT name, value
FROM   table
WHERE  name ='abc'
AND    ? IN ( col, value );

或者,使用子查询:

代码语言:javascript
复制
SELECT name, value
FROM   table t
       INNER JOIN
       ( SELECT ? AS input_var FROM DUAL ) v
       ON ( t.col = v.input_var OR t.value = v.input_var )
WHERE  name ='abc';
票数 1
EN

Stack Overflow用户

发布于 2017-09-18 16:38:52

如果希望重用来自Java代码的查询中的值,可以考虑使用预准备语句:

代码语言:javascript
复制
String sql = "select t1.name, t1.value from table t1 where t1.name =? and (t1.col = ? or t1.value = ?)";
int someVal = 10;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString("abc");
ps.setInt(2, someVal);
ps.setInt(3, someVal);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    String name = rs.getString("name");
    String value = rs.getString("value");
}

如果直接从Oracle尝试类似的操作,您可以使用会话变量:

代码语言:javascript
复制
declare
    some_val number := 10;
begin
    select t1.name, t1.value
    from table t1
    where t1.name ='abc' and (t1.col = some_val or t1.value = some_val);
end;
/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46274877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档