私はツイートテーブルの各エントリについて、分析済みのウェート数(アナリストあたり1つ)の分析済みウェイト(@OneToMany)と分析済みウェート(@ManyToOne) 。本質的に、私はアナリスト(表で表される)をいくつでも持つことができ、それぞれがツイートを1回だけ分析することができます。もう少し複雑にするために、ツイートテーブルのエントリは、別のテーブルで表されるプロセスごとにグループ化されています。PostgreSQL - 別のテーブルに基づいてテーブルを選択
私の質問は、特定のprocess_idとanalyst_idが与えられた最後のエントリのtweet_idのanalyzetweetテーブルをクエリし、それを使って同じprocess_idとanalyst_idも与えられたツイートテーブルの次のツイートを見つける方法は?基本的には、アナリストに、その特定のプロセス(実行)内でまだ分析していない次のつぶやきを与えたいと思います。ここで
は私のテーブルです:
CREATE TABLE tweet (
id SERIAL PRIMARY KEY,
process_id INTEGER NOT NULL REFERENCES process(id) ON DELETE CASCADE ON UPDATE CASCADE,
...
);
CREATE TABLE analyzedtweet (
id SERIAL PRIMARY KEY,
tweet_id INTEGER NOT NULL REFERENCES tweet(id) ON DELETE CASCADE ON UPDATE CASCADE,
analyst_id INTEGER NOT NULL REFERENCES analyst(id) ON DELETE CASCADE ON UPDATE CASCADE,
process_id INTEGER NOT NULL REFERENCES process(id) ON DELETE CASCADE ON UPDATE CASCADE,
...
);
CREATE TABLE process (
id SERIAL PRIMARY KEY,
...
);
CREATE TABLE analyst (
id SERIAL PRIMARY KEY,
...
);
私はこれを行う方法を知っている唯一の方法は2つの段階である:特定process_idを(PROCESSID)とanalyst_id(analystId)を考えると
- を実行しますそのプロセスでそのアナリストが分析した最後のtweet_idを私に渡すためのクエリです。
SELECT tweet_id from analyzedtweet WHERE analyzedtweet.analyst_id = analystId AND analyzedtweet.process_id = processId ORDER BY analyzedtweet.tweet_id DESC LIMIT 1
- (latestTweetIdを依頼するという。)上記のクエリの結果を取り、次のクエリを実行します。私はそこにあると確信している
SELECT * from tweet WHERE tweet.id > latestTweetId AND tweet.process_id = processId ORDER BY tweet.id DESC LIMIT 1
をJOINでこれを行うもっと良い方法は、私はちょうど方法を理解することはできません。
最後に、私はHibernateを使用しており、POJOを取得したいと考えています。
私はあなたのフィールドの一部が間違っていると思いますか? t.analyzedtweeetは存在しませんか? Tweetはprocess_idへの外部キー参照を持っていますが、それだけです。 – Brooks