1

我有一个 courier_routes 表,它有两个指向位置表的外键。courier_routes 表中的列是 start_location_id 和 end_location_id。(我正在使用甲骨文)

我想在 courier_routes 表中找到快递员去过的所有不同地点。

考虑这个例子

|id |start_location_id| end_location_id|...
|1|1|2|
|2|1|3|
|3|4|5|
|4|2|1|

我想找回 ids 1 2 3 4 5

我的有效 SQL 是

SELECT loc FROM (
SELECT start_location_id AS loc FROM courier_routes 
UNION
SELECT end_location_id AS loc FROM courier_routes);

我想把它翻译成 JPA。Hibernate 不支持联合,所以我考虑过进行子查询。这样做的问题是它可能会影响性能。

我在想类似的东西(伪代码......)

SELECT id FROM locations where id in (
    (SELECT start_location_id FROM courier_routes) 
       OR
    (SELECT end_location_id FROM courier_routes));

有没有更简单的方法?这张表会变大,所以我真的不想使用子查询。

我应该通过将两个单独的查询结果添加到一个集合中来在 java 中进行联合吗?

谢谢

4

1 回答 1

0

您可以对 HQL 中的两列进行连接:

SELECT distinct loc.id FROM locations loc, courier_routes c 
   where loc.id=c.start_location_id OR c.id=c.end_location_id

希望这可以帮助!

于 2012-09-27T12:22:00.303 回答