- - PR -
PostgreSQL8:2テーブル結合問い合わせに関して
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-26 11:44
お世話になります。
環境はPostgreSQL8です。 対象のテーブルは以下2つです。 Table A | cd | address | sex | | 001| 40 | 0 | | 002| 40 | 1 | Table B | cd | kbn | id | | 001| 001 | 01 | | 001| 001 | 02 | | 002| 001 | 01 | まず、AとBをA.cd=B.cdでJOINしたビューが欲しいです。 | A.cd | A.address | A.sex | B.kbn | b.id | というビューになるはずです。 もしくは、A.cdが取得できればいいです。 条件は以下です。 A.sex=0でA.address=40のレコードのうち B.kbn=001でB.id=01 B.kbn=001でB.id=02 : (数は決まっていない) : を、取得するSQLを作成したいと思ってます。 上のBに関する条件数が決まっていないのは、ユーザの入力によって変わるからです。 以下のSQLだと、Bの条件いずれかに当てはまるレコードが取れてしまいます。 ORのところをANDにすれば、取得数0になります。 SELECT * FROM A LEFT JOIN B ON B.cd = A.cd WHERE A.address = 40 AND A.sex = 0 AND ( ( B.kbn = '001' AND B.id = '01' ) OR ( B.kbn = '001' AND B.id = '02' ) : : ) 取得方法をご教授頂ければと思っています。 宜しくお願いします。 | ||||||||||||
|
投稿日時: 2007-04-26 12:20
まず、抽出条件の意味がわからない
は分かった。
は、どうゆう意味?てっきり、 (B.kbn=001でB.id=01) または、(B.kbn=001でB.id=02) または、.... かと思ったが、
ということなので、違うらしいし。 もう少し、やりたいことを明確に記述してください。 | ||||||||||||
|
投稿日時: 2007-04-26 12:34
説明の仕方がおかしかったようで。申し訳ないです。
Bの条件として (kbn=001でcd=01)(kbn=001でcd=02) とあった場合に、取得したい検索結果は | A.cd | | 001 | です。 また、 (kbn=001でcd=01) とあった場合に、取得したい検索結果は | A.cd | | 001 | | 002 | です。 という説明はどうでしょうか? | ||||||||||||
|
投稿日時: 2007-04-26 23:40
提示されたデータについて、A.cd = B.cd結合した結果は
| A.cd | A.address | B,sex | B.cd | B.kbn | B.id | -----------+-------------+---------+---------+------------+----------+- | 001 | 40 | 0 | 001 | 001 | 01 | | 001 | 40 | 0 | 001 | 001 | 02 | | 002 | 40 | 1 | 002 | 001 | 01 | となる。 再度説明をいただいた結果を書き出すと (kbn=001でcd=01)の場合 | A.cd | A.address | B,sex | B.kbn | B.id | ----------+-------------+---------+------------+----------+- | 001 | 40 | 0 | 001 | 01 | | 002 | 40 | 1 | 001 | 01 | の2行。 即ち、 | A.cd | ----------+ | 001 | | 002 | を取得したい。 (kbn=001でcd=01)(kbn=001でcd=02) の場合 先ほどの2行と、 (kbn=001でcd=02)の場合の | A.cd | A.address | B,sex | B.kbn | B.id | ----------+-------------+---------+------------+----------+- | 001 | 40 | 0 | 001 | 02 | との間で、A.cdが同じ結果である | A.cd | ----------+ | 001 | が欲しいてことでOK? であれば、
で、とれると思う。 今動かせる環境が無いので未確認だけど。 | ||||||||||||
|
投稿日時: 2007-04-27 09:28
お世話になります。
細かい説明ありがとうございます。 intersectで繋げてみた所、期待する結果が取得出来ました。 どうもありがとうございました。 | ||||||||||||
1
