1

location テーブルへの 2 つの外部キーを持つ 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|

ID 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));

もっと簡単な方法はありますか?このテーブルは大きくなるので、サブクエリを使用したくありません。

2 つの個別のクエリ結果をセットに追加して、Java でユニオンを実行する必要がありますか?

ありがとう

4

1 に答える 1

0

HQLの2つの列で結合を行うことができます:

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 に答える