- - PR -
PostgreSql での連結
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 です。 それぞれ最新版と考えています。 | ||||
|
投稿日時: 2006-08-03 16:30
GROUP BYで集約してhaving count(*) = 1 では駄目ですかね?
| ||||
|
投稿日時: 2006-08-03 16:39
(注)回答ではありません。
「全データの結合」というからには、table1の1レコード目の情報も 結果に含まれないとおかしいと思うのですが。 求める結果(=要件)に間違いがないのであれば、実現は無理と思います。 | ||||
|
投稿日時: 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-08-03 17:04
希望する結果では、table1の(a1,b1,c1)が捨てられてしまっています。
どういう条件で、このデータを捨てればいいのかが不明なので、誰も 適切な回答はできないと思います。 | ||||
|
投稿日時: 2006-08-03 17:16
b1を捨てて、b2を拾う条件は何ですか? t1_2の最大値なのでしょうか? | ||||
|
投稿日時: 2006-08-03 17:16
仕様がよく分かりませんが
distinct on してから結合すれば多分OK | ||||
|
投稿日時: 2006-08-03 17:36
b1を捨ててb2を生かす条件が分からなかったのですが、max値を生かすという例で
SQLを作ってみました。
|