質問編集履歴

1

ecaepazo

ecaepazo score 25

2016/10/20 23:24  投稿

テーブルの結合条件がわからない。
###前提・実現したいこと
以下の条件の時にテーブルの結合条件がわかりません。
図書テーブルと購入者テーブルを結合して、購入者が分類Aのどの本を、分類Bのどの本を購入したかがわかる抽出後のテーブルを出したいです。
```
#前提となるテーブル
図書テーブル
|管理番号|分類|購入者コード|
|AA001 |A  |00001     |
|AA002 |A  |00001     |
|BB001 |B  |00001     |
|BB002 |B  |00001     |
|BB003 |B  |00001     |
|CC001 |C  |00002     |
購入者テーブル
|購入者コード|購入者名|
|00001     |やまだ  |
|00002     |あおき  |
```
上記のようなテーブルがある場合に以下のように抽出したいです。
```
#抽出後のテーブル
|購入者コード|図書分類A|図書分類B|
|00001     |AA001   |BB001   |
|00001     |AA002   |BB002   |
|00001     |null    |BB003   |
```
###発生している問題
今回試したSQLは以下になります。
```
SELECT
 図書テーブル.購入者コード
 購入者テーブル.購入者コード
 , 分類A.図書分類A
 , 分類B.図書分類B
FROM
 図書テーブル
 購入者テーブル
 LEFT OUTER JOIN (
   SELECT
     購入者コード AS A_購入者コード
     , 分類 AS 図書分類A
   FROM
     sst_pcs
     図書テーブル
   WHERE
     分類 = 'A'
 ) AS 分類A
   ON 図書テーブル.購入者コード = 分類A.A_購入者コード
 LEFT OUTER JOIN (
   SELECT
     購入者コード AS B_購入者コード
     , 分類 AS 図書分類B
   FROM
     sst_pcs
     図書テーブル
   WHERE
     分類 = 'B'
 ) AS 分類B
   ON 図書テーブル.購入者コード = 分類B.B_購入者コード
WHERE
 図書テーブル.購入者コード = '00001'
```
これを流すと、以下のように取得されてしまい、ここから手が止まってしまいました。
```
|購入者コード|図書分類A|図書分類B|
|00001   |AA001  |BB001  |
|00001   |AA002  |BB001  |
|00001   |AA001  |BB002  |
|00001   |AA002  |BB002  |
|00001   |AA001  |BB003  |
|00001   |AA002  |BB003  |
```
どのような条件にすればよいかご教授いただければと思います。
よろしくお願いいたします。
  • PostgreSQL

    2641 questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • SQL

    5746 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る