2010-12-14 31 views
0

他のフィールドで指定したフィールド値と最高値を持つ行に参加します 時間TIMESTAMP
プライマリキー(記事、ラン、タイム)
...

関連する最新行Article_versionsの記事とフィールドのフィールドを選択したいとします。
joinステートメントまたは2つのselectステートメントを使用する必要がありますか?
どうすればいいですか?は、私は2つのテーブルを持っている

答えて

0

あなたが取得しようとしている正確に何の情報混乱されていますが、特定のIDを知っていれば、あなたが使用することができます。

SELECT ID,lang,time 
FROM articles,article_versions 
WHERE articles.ID=<article_id_you_provide> AND 
     articles.ID=article_versions.article AND 
     article_versions.time = (SELECT max(time) 
           FROM article_versions 
           WHERE article=<article_id_you_provide>); 

が、これはあなたが探していると私ができるものではない場合、私に教えてください私の答えをさらに修正してください。 [時間]のみ一意の列を使用すると、以下のように使用することができますセットの参加に返される

+0

をはい、私が望むものをやっています。しかし、パフォーマンスはどうですか、これは結合よりも遅くないか、結合と同じですか? – kravemir

+0

このようにしても、2つのテーブルとwhere句のクロス積を取るために、この方法で結合するのは意味があります。私がjoin構文を使わなかった理由は、article_versionsのあなたの外部キーが記事と同じ名前ではないので、自然な結合をするのも面倒です。 –

0

[Articles_versions]と仮定すると:。

SELECT [Articles].[ID], [Articles_versions].[article], [Articles_versions].[lang], MAX([Articles_versions].[time]) 
FROM Articles Inner Join Articles_versions ON [Articles].[ID] = [Articles_versions].[article] 
GROUP BY [Articles].[ID], [Articles_versions].[article], [Articles_versions].[lang] 
+0

これは最新の記事バージョンを取得しません。 MAX(時間)は最新ですが、article_versionsの他のフィールドは最新です – kravemir

関連する問題