如何选择最贵的商品pr。 Hibernate HQL中的架子?

时间:2017-08-10 06:07:34

标签: hibernate hql

此刻我的头撞在了墙上。通常我会在FROM子句中使用子查询解决此问题,但在HQL中不允许这样做。 我做了一个简单的例子,希望你能帮助我。

鉴于我有以下表格:

CREATE TABLE PUBLIC.SHELF
  (id INTEGER NOT NULL,
      PRIMARY KEY (id)
);

CREATE TABLE PUBLIC.ITEM
  (id INTEGER NOT NULL,
   price INTEGER NOT NULL,
   description VARCHAR(100) NOT NULL,
      PRIMARY KEY (id)
);

CREATE TABLE PUBLIC.SHELF_ITEMS
(shelf_id INTEGER NOT NULL,
 item_id INTEGER NOT NULL,
     PRIMARY KEY (shelf_id, item_id)
);

从此我想选择最贵的项目pr。架。 我可以通过查询以下语句来实现这一点:

SELECT
  shelf.id,
  MAX(item.price)
FROM
  PUBLIC.SHELF as shelf
  INNER JOIN PUBLIC.SHELF_ITEMS as shelfitems ON shelf.id = shelfitems.shelf_id
  INNER JOIN PUBLIC.ITEM as item ON item.id = shelfitems.item_id
GROUP BY shelf.id;

然而还有一个要求! - 我也想要在同一结果集中的项目ID和描述。 所以我想要这样的事情:

SELECT
  shelf.id,
  item.id,
  item.description,
  MAX(item.price)
FROM
  PUBLIC.SHELF as shelf
  INNER JOIN PUBLIC.SHELF_ITEMS as shelfitems ON shelf.id = shelfitems.shelf_id
  INNER JOIN PUBLIC.ITEM as item ON item.id = shelfitems.item_id
GROUP BY shelf.id;

然而,这个结果是一个错误,说明我需要在GROUP BY子句中添加item.id,当我添加时,我得到所有行。

就像我错过了一些条件,说我只想要选择最贵的。

2 个答案:

答案 0 :(得分:1)

SELECT
    shelf.id,
    item.id,
    item.description,
    item.price
FROM
    shelf shelf
    INNER JOIN shelf_items shelfitems ON shelf.id = shelfitems.shelf_id
    INNER JOIN item item ON item.id = shelfitems.item_id
WHERE
    item.price = (
        SELECT
            MAX(item_inner.price)
        FROM
            shelf_items shelfitems_inner
            INNER JOIN item item_inner ON item_inner.id = shelfitems_inner.item_id
        WHERE
            shelf.id = shelfitems_inner.shelf_id
    )

答案 1 :(得分:1)

纯HQL / JPQL解决方案返回实体,假设映射已正确完成,{{1>}在多对多Shelf

Item

这将生成与 Ashutosh A 的答案相同的SQL。