-1

私は2つのテーブルがあります:同僚が私は1つのテーブルにこれらをマージするためのPostgresで継承を使用することができることを示唆しこれらの2つのテーブルをマージする方法はありますか?

question_likes: 

question_id references question(id) 
user_id references users(id) 
primary key (user_id, question_id) 


answer_likes: 

answer_id references answers(id) 
user_id references users(id) 
primary key (user_id, answer_id) 

この要件を設計する方法はありますか?

+0

継承は、テーブルに複数の共通列がある場合に意味があります。 1つの列に対してのみ継承を使用すると、余分なIMOが発生します。 [継承に関する警告](http://www.postgresql.org/docs/current/static/ddl-inherit.html#DDL-INHERIT-CAVEATS) – Abelisto

+0

についても読んでください。どのような問題を解決しようとしていますか?あなたの現在のデザインは何ですか?何のサブタイプとは何ですか? (質問と回答はポスト?)「マージ」とはどういう意味ですか?ドキュメンテーションに移動して、あなたがデザインしているものとあなたがどこにいるのかを教えてください。あなた自身を説明してください。 – philipxy

答えて

1

まあ、私は確かにそれを必要としません。テーブル間にJOINを実行し、以下のような必須フィールドを表示することができます。または、以下のSQLステートメントでビューを作成します。

select q.question_id, 
q.user_id, 
a.answer_id 
from question_likes q 
join answer_likes a on a.user_id = q.user_id; 

(または)full outer joinこのような何かを行う必要があります

from question_likes 
full join answer_likes using(user_id); 
+0

私はこれらの2つのテーブルが外部キーを介して関連していないことを理解していませんので、ここでどのように助けてくれますか? –

+0

@ AhmadAl-kheat、あなたはすべてのテーブル構造を提供していませんが、ポストから両方のテーブルがユーザ(id)を参照する 'user_id'共通カラムを持っていることが分かります。そしてあなたは彼らに加わることができます。 'join 'はテーブル間の共通の列でも行うことができます – Rahul

+0

@Rahul - むしろ' full join answer_likes using(user_id); ' – klin

0

をクリンによってコメントで提案されているように:

CREATE TABLE likes (
    like_id   serial PRIMARY KEY, 
    user_id int 
); 

CREATE TABLE question_likes (
    question_id int, 
    primary key (user_id, question_id) 
) INHERITS (likes); 

CREATE TABLE answer_likes (
    answer_id int, 
    primary key (user_id, answer_id) 
) INHERITS (likes); 

mergingUNION

SELECT like_id, user_id, question_id, null as answer_id FROM question_likes q 
UNION 
SELECT like_id, user_id, null as question_id, answer_id FROM answer_likes a; 
を使用して行うことができるより

正確に何を達成したいですか?

関連する問題