なんらかの理由で、employee1とemployee2の2つの別々のテーブルに従業員がいるとします。
まるで積み重ねられているかのように、それらを足し合わせたいだけです。
何かのようなもの:
select all from employee1 and employee2 where name = bubba
私は一般化することを知っています、これは最終的にpostgresにあるので、そこに何か詳細があれば私は感謝を監視する必要があります
SELECT field1, field2, field2 FROM tableA WHERE field1='x'
UNION
SELECT field1, field2, field2 FROM tableB WHERE field1='x'
UNION ALL
繰り返しでも、すべてのレコードが必要な場合に使用します。
あなたはただ組合をしたいと思うでしょう
select * from Employee1 where name = 'bubba'
union
select * from Employee2 where name = 'bubba'
UNIONキーワードを使用する必要があります
select * from employee1 where name = 'bubba'
union
select * from employee2 where name = 'bubba'
ほとんどのデータベースでは、要求しているものはUNIONと呼ばれ、次のように記述されています。
select all from employee1 where name = bubba
UNION
select all from employee2 where name = bubba
これは、関係代数のプリミティブの1つである「和集合」演算子に由来します。
UNIONは設定された和集合に従うことに注意してください。つまり、E1テーブルとE2テーブルの間で重複する行については、行のコピーを1つだけ選択します。すべてのコピーを選択する場合は、「UNIONALL」演算子を使用してください。
UNIONオペレーションを参照されていると思います。
テーブルに同じスキーマがある場合は、
SELECT * FROM employee1 UNION SELECT * FROM employee2
両方のテーブルの列数は同じである必要があり、列は同様のタイプである必要があります。
その組合だと思います
名前='bubba'である従業員1から*を選択します
連合
select * from employee2 where name ='bubba'
複製も必要な場合は、unionallを使用してください。
あなたが欲しいのは「すべての組合」です:
select * from employee1
union all
select * from employee2;
列の種類と順序が一致している必要があります。一致していない場合は、選択リストに「*」ではなく列リストを指定する必要があります。「where」句は、「select」ステートメントのいずれかまたは両方に追加できます。
「all」がないと、2つのクエリ間で重複する行は1つの行に折りたたまれます。それが必要な場合は、「すべて」を削除してください。
他の人が述べたように、あなたはUNION
. ただし、本当に結果を積み上げたい場合は、 を使用する必要がありますUNION ALL
。UNION
重複を削除し、それらを含めるUNION ALL。http://www.postgresql.org/docs/8.2/interactive/queries-union.htmlを参照してください
価値があるのは、2 つのセット内の重複を取り除くためにソートする必要がないため、union all の方が実行が高速であることです。