【发布时间】:2021-08-25 22:11:09
【问题描述】:
我有一个表产品,其中包含诸如
之类的信息| id | product_name | retailer_name |
|---|---|---|
| 1 | Shirt | Gucci |
此表与 product_prices 有 OneToMany 连接,其中包含如下信息
| id | price | country | product_id |
|---|---|---|---|
| 100 | 95.5 | United Kingdom | 1 |
| 101 | 97.5 | France | 1 |
| 300 | 70.9 | EUROPEAN_UNION | 1 |
我需要创建一个 MySQL 或 JPQL 查询来检索
- 产品名称
- 零售商名称
- 价格(根据国家或选择欧盟)
例如:如果选择国家英国 -> 那么它 将检索:
- 衬衫 Gucci 95.5
如果选择国家意大利 -> 那么它将检索:
- 衬衫 Gucci 70.9
如您所说,在第二个示例中,系统检索到 EUROPEAN_UNION 价格,因为找不到意大利。
如果选择国家 EUROPEAN_UNION -> 那么它将检索:
- 衬衫 Gucci 70.9
如您所说,在第三个示例中,系统检索到 EUROPEAN_UNION 价格,因为找到了 EUROPEAN_UNION 国家/地区。
我怎样才能做到这一点?
我在 JPQL 中尝试过类似的东西:
select new com.ProductDTOWithPrice(p.id, p.product_name, p.retailer_name, " +
"pr.price) " +
"from Product p " +
"join ProductPrice pr " +
"where p.id =:productId and (case when pr.country=:country then 1 " +
"else when pr.country.id = EUROPEAN_UNION then 1 end)"
另外,尝试进行多项选择或使用存在,但我仍然无法弄清楚。我在检索“价格”时遇到了困难。
select p.id, p.name,
Max(IF(pp.country_id = :countryId, true, false)) as mainCountry,
Max(IF(pp.country_id = 400, true, false)) as europeanCountry
from products p
join product_prices pp on p.id = pp.product_id
where p.id = '0002fb8977754949bf4da70535e1a2e6'
GROUP BY p.id;
有什么帮助吗?
【问题讨论】:
-
如果有人给你一个jpql方案,另一个人给你一个MySQL方案,你会接受哪一个?
-
任何,对我来说都无所谓。我更喜欢 JPQL。
-
@Strawberry ,请问您为什么要删除我的标签?我说我需要 mysql 或 jpql 中的解决方案。这个问题与一对多关系和 if-case-statements 相关
标签: mysql if-statement case one-to-many jpql