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

Conditional where clause based on another parameter

我有 3 tables :

Stores (
    store_Id
)

Products(
    product_Id,
    store_Id
)

Price(
    product_Id,
    currency,
    price   
)

我的问题陈述是这样的:

生成这样的结果集:

如果 store_Id 为 1,则 select 那些价格较低的产品 比 3

如果 store_Id 为 2,则 select 那些价格较低的产品 比 5

如果 store_Id 为 3,则 select 那些价格较低的产品 比 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 <= ?

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

我正在使用 DB2 v10.5

是的,您可以将此逻辑合并到 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);