【发布时间】:2014-09-23 17:19:20
【问题描述】:
我已将相当复杂的 SQL 查询转换为 JPQL。突然,我发现因为我在 2.0 之前的 OPENJPA 1.2.8 版本上,所以 ON-Clause 不起作用。所以,很可能我不能使用左开连接。在这种情况下,最好的策略是什么?
JPQL 查询:
select priceListTerm.SELLING_PRICE, priceListTerm.COMMISSION_FORMAT, priceListTerm.COMMISSION,
priceListAssignment.EFF_START_DATE, priceListAssignment.EFF_END_DATE,
priceListAssignment.PRIORITY_LEVEL,
venue.CODE, tb.HEADQUARTERS, vendor.NAME from PriceListTerm priceListTerm
JOIN PriceList priceList on priceListTerm.PRICELIST_UID = priceList.UIDPK
JOIN ProductSku productsku on priceListTerm.PRODUCTSKU_UID=productsku.UIDPK
LEFT OUTER JOIN
(PriceListAssignment priceListAssignment JOIN Venue venue on
priceListAssignment.VENUE_UID=venue.UIDPK
JOIN Vendor vendor on vendor.UIDPK=venue.VENDOR_UID)
on priceListAssignment.PRICELIST_UID = priceList.uidpk
where productsku.skuCode= :sku
and (vendor.name is null or vendor.name= :vendor)
order by priceListAssignment.PRIORITY_LEVEL;
【问题讨论】:
-
ON子句是标准的 ANSI SQL,并且已经存在多年。如果不支持该语法会很奇怪。但是,您可以(可能)使用SELECT * FROM a, b WHERE a.id = b.id而不是SELECT * FROM a JOIN b ON a.id = b.id -
谢谢,但您的建议是内部加入
标签: mysql sql openjpa outer-join