首页 > 解决方案 > Oracle 查询中的条件 WHERE EXISTS

问题描述

甲骨文在这里。我有下表:

create table Foobars ( 
    id integer constraint pkFoobars primary key using index,
    fizz varchar2(20 char), 
    buzz varchar2(20 char)
)

在我的代码中,我将得到一个名为 的字符串fizzOrBuzz,我不会提前知道哪个字段(fizz或)。buzz我需要在Foobars表中搜索匹配基于值。唯一可以确定的是没有重复项(没有 2 条记录具有相同的值,也没有 2 条记录具有相同的值)。fizzbuzzfizzOrBuzzfizzbuzz

到目前为止我的查询:

SELECT
  id
FROM
  Foobars
WHERE EXISTS (
  SELECT
    id
  FROM
    Foobars
  WHERE
    fizz = ? -- fizzOrBuzz gets injected here by the app layer
) OR (
  SELECT
    id
  FROM
    Foobars
  WHERE
    buzz = ? -- fizzOrBuzz gets injected here by the app layer  
)

但是,这不是有效的 SQL 代码(不执行),我确信有更好的方法来完全做到这一点。有任何想法吗?

标签: sqloracle

解决方案


为什么不直接使用OR

select id
from foobars
where fizz = ? or buzz = ?;

或者,只使用一个参数IN

select id
from foobars
where ? in (fizz, buzz);

推荐阅读