2017-12-13 9 views
0

この3つのテーブルがあり、特定のアドレスに新しいイベントを挿入したいのですが、その方法はわかりません。SQLクエリ:2つのテーブルを組み合わせて別のテーブルにデータを挿入する

account(id, email, password) 
address(id, city, street, number, c_id(foreign key for account)) 
event(id, title, description, e_id(foreign key for address)) 

ユーザーは、自分のアドレスにイベントを登録できます。私は何をしようとしているベロー。 uはイベント表の外部キーとして追加することができるようにあなたは、街の主キーにすることができ、アドレステーブルで

/*I don't know how to combine those lines above.*/ 
INSERT INTO public.event(id, title, description, c_id, e_id) VALUES ('1', 'event title', 'event description', '????') 
+2

どのDBMS?ほとんどの場合、INSERT ... SELECTの組み合わせ構文、またはそれに類するものがサポートされています。 2つの選択クエリを内部結合で1つにマージすることができます(アドレステーブルの複数の行を返さないようにする必要があります。これは、関連するユーザーアカウントに一致する行を返すだけなので、アドレス?)。 – ADyson

+0

私はPosgreSqlを使用しています。まだ助けを待っている。 –

+0

https://www.postgresql.org/docs/9.1/static/sql-insert.htmlは、基本的な考え方を示しています。「INSERT INTOフィルムのSELECT * FROM tmp_films where date_prod <'2004-05-07';」を参照してください。明らかにフィールドに置き換える必要がありますが、挿入操作と選択操作を1つにまとめることができます。また、2つのselect文を1つにまとめるだけで済みます(これは内部結合を使用して行うことができます)。 – ADyson

答えて

-1

:イベントで

/*I believe this can return multiple lines.*/ 
SELECT c_id FROM public.address WHERE city='new york'; 

/*This will return only one line.*/ 
SELECT id FROM public.account WHERE email='[email protected]' AND password='user01'; 

挿入がようなものになるだろう。

+0

これは全く意味がありません。 1つの都市内に多数の住所が存在することがあるため、都市は決して(論理的に)その表の主キーとして使用することはできません。それができたとしても、問題を解決することとは何の関係もありません。 Cityは、すでに主キーであるアドレスIDを介してイベントテーブルにリンクして導出することができ、既にイベントテーブルの外部キーとして定義されているため、イベントテーブルには必要ありません。 OPの問題は、INSERTクエリで既存の選択されたキーを使用できるように、INSERTステートメントとSELECTステートメントを組み合わせる方法です。あなたの提案は、少なくとも奇妙なことです。 – ADyson

関連する問題