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

时间:2019-06-10 12:27:56

标签: sql db2 db2-luw

我有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 <= ?

我的问题:这可以在SQL本身中仅用1个查询而无需使用Java来实现(原因是:“产品和价格”是一个包含数千条记录的庞大表)

我正在使用DB2 v10.5

1 个答案:

答案 0 :(得分:3)

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