2012-01-10 5 views
0

私は2つのテーブルを持っています。SQL - 別のテーブルのいくつかの列のみをマージする

最初のテーブル(posts_article)

id_post id_user title content published nbr_comments timestamp 
--------------------------------------------------------------------------- 
1   15  title1 text1  1   23    1111111111 
2   20  title2 text2  0   54    1122334455 

第二のテーブル(posts_text)私はいくつかのことを試してみたが、私は本当にすることはできません

id_post id_user title content message published nbr_comments timestamp 
-------------------------------------------------------------------------------------- 
1   15  title1 text1    1   23    1111111111 
2   20  title2 text2    0   54    1122334455 
1   17       message1    15    1234567891 
2   22       message2    0    1987654321 

id_post id_user message nbr_comments timestamp 
------------------------------------------------------- 
1   17  message1 15    1234567891 
2   22  message2 0    1987654321 

期待される結果これを解決する。期待どおりの結果を得るにはどうすればいいですか?その結果を選択する最も効率的な方法は何ですか?

EDIT:このマージのロジックは、同時に(ユーザーによって提出)「ポスト」のすべての異なる種類を取得することができることです。

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

+0

あなたがより正確に、あなたのマージ/参加するロジックがなりたいものを述べるだろうか?この例はかなりいいですが、目的のステートメントがありません。 – Romain

+0

私は投稿を編集しました。 (もし私が答えがあるかどうか分からないかどうかは分かりませんが、私はかなりstackoverflowすることにしました) – oliv23

答えて

1

試してみてください。

SELECT id_post, id_user, title, content, NULL AS message , published, nbr_comments, timestamp FROM posts_article 
UNION 
SELECT id_post, id_user, NULL as title, NULL as content, message, NULL as published, nbr_comments, timestamp FROM posts_text 
+0

これは最高の方法だと思いますか? – oliv23

+0

通常、モデルを変更するポジションにいる場合は、モデルを変更するのが最善です。 ImhoのすべてのUNIONは設計上の欠陥に基づいています。プロジェクトがブラウンフィールドプロジェクトなどのためモデルを変更できない場合は、そのモデルとその制限事項を満たしている必要があります。 – fyr

+0

事実、基本的にユーザは記事や短いメッセージや写真を投稿することができます。そして、私はそのテーブルに「投稿」の各タイプを保存します。だから、私には、すべての投稿を検索する問題には3つの解決策しかありません:1)投稿タイプがあるのと同じくらい多くのリクエストがあります2)すべての投稿をまとめて取得するすべてのリクエスト3) ** 1つの**データベースは、この質問の「期待される結果」とそこからのSELECTを再現します。 – oliv23

関連する問題