基于另一个参数的条件 where 子句

Posted

技术标签:

【中文标题】基于另一个参数的条件 where 子句【英文标题】:Conditional where clause based on another parameter 【发布时间】:2019-06-10 12:27:56 【问题描述】:

我有 3 张桌子:

Stores (
    store_Id
)

Products(
    product_Id,
    store_Id
)

Price(
    product_Id,
    currency,
    price   
)

我的问题陈述是这样的:

产生这样的结果集:

如果 store_Id 为 1,则选择价格较低的产品 大于 3

如果 store_Id 为 2,则选择价格较低的产品 大于 5

如果 store_Id 为 3,则选择价格较低的产品 大于 6.5

结果集应包含列:store_Id、product_Id、货币、价格。

我可以在 Java 中通过循环运行这样的查询并替换参数并最终收集所有结果来做到这一点:

select ... 
from stores s join products p on s.store_Id = p.store_Id
join price pr on pr.product_Id = p.product_Id
where s.store_Id = ?
and pr.price <= ?

我的问题是:这是否可以在不使用 java 的情况下在 SQL 本身中通过 1 个查询来实现(原因是:产品和价格是一个包含数千条记录的庞大表)

我使用的是 DB2 v10.5

【问题讨论】:

【参考方案1】:

是的,您可以将此逻辑合并到WHERE 子句中:

select ... 
from stores s
inner join products p
    on s.store_Id = p.store_Id
inner join price pr
    on pr.product_Id = p.product_Id
where
    (s.store_Id = 1 and pr.price < 3) or
    (s.store_Id = 2 and pr.price < 5) or
    (s.store_Id = 3 and pr.price < 6.5);

【讨论】:

以上是关于基于另一个参数的条件 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

具有另一个 sql 语句的 where 子句中的 case 条件

在mysql select语句中使用条件where子句

在 WHERE 子句中使用可选条件的正确方法

SQL 条件 where 子句使用查询字符串参数执行 - 如果需要函数?

向 where 子句添加条件

SQL Server If 条件在 where 子句?