2012-02-17 24 views
1
| postid | ref_postid | title | 
| 1  | 0   | Title 1 | 
| 2  | 1   |   | 
| 3  | 1   |   | 
| 4  | 0   | Title 2 | 
| 5  | 4   |   | 

ディスカッションフォーラムのテーブルです。 ref_postid = 0の場合、メインポストであることを意味します。 ref_postidが0でないとき、それは答えであり、postidへの参照です。上記の表の例を参照してください。 (メインの投稿のみがタイトルを持っています)SQLで同じテーブルの2行から選択

テーブルのすべての行を選択したいのですが、問題は答えが参照するディスカッションのタイトルを表示することです。

例:私は行がpostid = 2の場所にしたいとしましょう。また、ディスカッションの名前である「タイトル1」を取得したいとします。

私はCASEでやってみましたが、ちょうどエラーがあります。私はこれをあまりよくしていません。 1つのクエリで対応できますか?または、2つのクエリを使用する必要がありますか?

ありがとうございました!

+0

この問題は、データベーステーブルを再設計することによって最もよく解決され、クエリは発生しません。それが不可能な場合は、テーブルを自身を開始点として参加させてください。 – Widor

+0

テーブルをどのように設計すればよいですか?私は両方の同じプロパティを持っているので、同じテーブルに回答と質問を保持することをお勧めします。 –

+0

個人的には、質問と回答の間に親子1人の関係があると思います。私は '質問'フィールドに 'title'フィールドのテーブルを、' postid'と 'title'フィールドにはFKを付けた' Answers'のテーブルを持っています。 – Widor

答えて

1
select ifnull(q.title, a.title) title, ... (other columns) 
from posts a 
left join posts q on a.ref_postid <> 0 and a.ref_postid = q.postid 
関連する問題