- PR -

PostgreSql での連結

投稿者投稿内容
うえだ
ベテラン
会議室デビュー日: 2006/01/21
投稿数: 52
投稿日時: 2006-08-03 16:09
2つのテーブルがあり、ひとつはすべて重複を許し、他方は重複を許していないものが
あります。
table1
t1_1 | t1_2 | t1_3
------------------
a1 | b1 | c1
a1 | b2 | c1
a2 | b2 | c1
------------------

table2
t2_1 | t2_2 | t2_3
------------------
a1 | d1 | e1
a2 | d2 | e2
a3 | d3 | e3
------------------

この二つのテーブルをt1_1 = t2_1かつt1_1を重複のない全データの結合を出したいのですが
どうすればいいでしょうか?
つまり
t1_1 | t1_2 | t1_3 | t2_1 | t2_2 | t2_3
---------------------------------------
a1 | b2 | c1 | a1 | d1 | e1
a2 | b2 | c1 | a2 | d2 | e2
---------------------------------------
としたいのですが、エレガントにSQL一発でできませんか?
環境はpostgersql + linux + activeperl です。
それぞれ最新版と考えています。
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-08-03 16:30
GROUP BYで集約してhaving count(*) = 1 では駄目ですかね?
のりさん
会議室デビュー日: 2003/03/27
投稿数: 1
投稿日時: 2006-08-03 16:39
(注)回答ではありません。

「全データの結合」というからには、table1の1レコード目の情報も
結果に含まれないとおかしいと思うのですが。

求める結果(=要件)に間違いがないのであれば、実現は無理と思います。
うえだ
ベテラン
会議室デビュー日: 2006/01/21
投稿数: 52
投稿日時: 2006-08-03 17:04
t1_1と t1_2 だけが一対他になっており、それを無視すれば
すべて1対1対応になるので、
t1_1 | t1_3 | t2_1 | t2_2 | t2_3
---------------------------------------
a1  | c1 | a1  | d1  | e1
a2  | c1 | a2  | d2  | e2
---------------------------------------
とはできませんか?
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2006-08-03 17:04
希望する結果では、table1の(a1,b1,c1)が捨てられてしまっています。
どういう条件で、このデータを捨てればいいのかが不明なので、誰も
適切な回答はできないと思います。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2006-08-03 17:16
引用:

t1_1と t1_2 だけが一対他になっており、それを無視すれば
すべて1対1対応になるので、



b1を捨てて、b2を拾う条件は何ですか?
t1_2の最大値なのでしょうか?
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2006-08-03 17:16
仕様がよく分かりませんが
distinct on
してから結合すれば多分OK
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2006-08-03 17:36
b1を捨ててb2を生かす条件が分からなかったのですが、max値を生かすという例で
SQLを作ってみました。

コード:
select * from
(select t1_1,max(t1_2) as t1_2,t1_3 from table1 group by t1_1,t1_3) as x,table2
where x.t1_1=t2_1
order by x.t1_1

スキルアップ/キャリアアップ(JOB@IT)