基于另一个参数的条件 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);
我有 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);