【发布时间】:2019-08-16 14:58:46
【问题描述】:
这里是甲骨文。我有下表:
create table Foobars (
id integer constraint pkFoobars primary key using index,
fizz varchar2(20 char),
buzz varchar2(20 char)
)
在我的代码中,我将得到一个名为fizzOrBuzz 的字符串,我不会提前知道哪个字段(fizz 或buzz)。我需要根据fizzOrBuzz 值在Foobars 表中搜索匹配的fizz 或buzz。唯一可以确定的是没有重复(没有 2 条记录具有相同的 fizz 值,也没有 2 条记录具有相同的 buzz 值)。
到目前为止我的查询:
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 代码(不执行),我确信有更好的方法来完全做到这一点。有什么想法吗?
【问题讨论】:
-
OR=>OR EXISTS?但是作为答案提供的其他选项更好;尤其是因为您的子查询不相关 - 假设您期望这些子查询的 ID 与主查询匹配。 (显示您遇到的错误以及示例数据/预期结果会很有帮助。) -
fizz 列是否实际包含字符串“fizz”?