• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの問題です。)

SQLで社員テーブルと所属テーブルを結合して重複を排除する方法

このQ&Aのポイント
  • SQLを使用して、社員テーブルと所属テーブルを結合し、重複を排除して社員番号と社員氏名の一覧を表示する方法について教えてください。
  • Oracle8iを使用しています。
  • ハッシュタグ: SQL, データベース, 社員テーブル, 所属テーブル, 結合

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>欲しい結果は、所属番号でソート 成るほど、分りました。 その場合は、どちらの所属番号でソートするのか決める必要があります。 例では花子の所属番号が両方とも太郎よりも若くなっていますが、もし太郎の番号が花子の番号の間に来たらどうしますか? 例えば所属番号が複数ある場合は大きい方を取る、という決まりにするなら SELECT 社員番号, Max(所属番号) as 所属番号の最大 FROM 所属テーブル GROUP BY 社員番号; とかで社員番号に対応する所属番号をひとつにして、これと社員テーブルを連結して「所属番号の最大」でソートしたらどうでしょうか。

sunnys
質問者

お礼

なるほど、Maxで抽出してから・・ですね。 それなら思った通りの結果が返ってきます。 考え方を変える、というのがなかなか出来なくて。 参考になりました。どうもありがとうございました♪

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

所属テーブルのデータを拝見するに、「花子」さんが所属に2つありますね。 所属テーブルとの結合により「花子」さんが2回(計3つ)が表示されています。 ORDER BY で所属番号順にする必要があるならばルールが必要でしょう。 (どれをソート用の所属とするか)

sunnys
質問者

お礼

回答ありがとうございました。 また何かありましたらよろしくお願いします。

sunnys
質問者

補足

回答ありがとうございます。 社員番号に対して所属は常に1対1では無いので、 所属の重複は避けられないんです。 ただし、今回は社員の重複無しで、 なおかつ所属でソートする必要があるのでお知恵をお借りしたい次第です。 また何か案がありましたら教えてください。

すると、全ての回答が全文表示されます。
回答No.2

ご質問のSQLを実行した結果は、 1 花子 10 1 花子 20 2 太郎 30  だと思います。 SELECT distinct a.社員番号, a.社員氏名 FROM 社員 a,所属 b where a.社員番号 = b.社員番号 にすれば、期待の結果が得られると思います。

sunnys
質問者

お礼

回答ありがとうございました。 また何かありましたらよろしくお願いします。

sunnys
質問者

補足

回答ありがとうございます。 すみません、私の説明が悪かったですね。 確かに私の書いたSQLの結果は 1 花子 10 1 花子 20 2 太郎 30   です。 そして、欲しい結果は、所属番号でソートされた 1 花子 10 2 太郎 30  という結果です。 つまり、社員番号での重複を避けたいのです。 また何かありましたら教えてください。 

すると、全ての回答が全文表示されます。
  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.1

Distinct は使いたくないのですか? SELECT DISTINCT ~ と書いてやってみてください。 ただ、パフォーマンスは悪くなります。

sunnys
質問者

お礼

回答ありがとうございました。 また何かありましたらよろしくお願いします。

sunnys
質問者

補足

回答ありがとうございます。 DISTINCTを使っても重複するのです。 所属コードが違うから当然なんですが・・。 そこをお知恵を借りてなんとかできないかと、思ったのですが・・。 また何かあれば教えてください。

すると、全ての回答が全文表示されます。

関連するQ&A