2017-09-01 2 views
2

mysqlには、テーブルが2つあります:QuestionCommentaryです。mysqlでは、2番目のテーブルと結合し、最新の日付を持つ行を取得する方法は?

質問:ID、タイトル

解説:QuestionId、コンテンツ、作成した(日付フィールド)

QuestionIdは、質問者のIDに外部キーであるこれは、彼らがどのように見えるかです。

だから私は0から多くの関係質問と解説の間にあります。つまり、質問には0..nのコメントが含まれます。

私がしたいことは、最新の解説(作成されたフィールド)がある場合はすべての質問を表示することです。したがって、コメントがない場合、質問はまだ表示されるはずですが、コメントのコンテンツフィールドにはnullが表示されます。

にはというコメントが含まれていることを除いて、このクエリではほとんど機能していると思います。言及したように私はのコメントがあるようにしたいです同様に。

select 
    q.Id AS Id, 
    q.Title AS Title, 
    c.Content AS Content 
from question AS q 
left join commentary as c on c.QuestionId = q.Id 
where 
    c.Created = (
     select MAX(created) 
     from commentary 
     where questionid = q.Id 
    ) 

スクリプトを調整するにはどうすればよいですか?

+0

@Barmar:私はあなたが "複製ボタン"で少し速いと思います。私はあなたがリンクしている質問と重複しているとは思わない。 stackoverflowに関する質問に時間を費やすときは、質問を重複しているとマークする前に少なくとも質問を読むことができます。 – brinch

+0

私はそれが重複していると思います。 'c.created =(...)'を 'WHERE'節から' ON'節に移動するだけで動作します。 – Barmar

+0

[この質問](https://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column?rq=1)も参照してください。各質問の最新のコメントを取得するクエリを作成する方法を示します。そのクエリで結合を残すことができます。 – Barmar

答えて

1

where句は、注釈レコードが存在しない場合は、注釈行が最大作成日を持つ行のみを返します。解説がない場合には常にtrueでなければならない解説question_IDがヌルである行を含める必要があります。

select 
    q.Id AS Id, 
    q.Title AS Title, 
    c.Content AS Content 
from question AS q 
    left join commentary as c on c.QuestionId = q.Id 
where 
    c.Created = (
     select MAX(created) 
     from commentary 
     where questionid = q.Id 
    ) 
    or 
    c.QuestionId is null 
関連する問題