以下のような二つのテーブルがあります。

社員テーブル
社員番号 社員氏名
1     花子
2     太郎

所属テーブル
社員番号 所属番号
1     10
1     20
2     30

欲しいのは以下の結果です。
1 花子
2 太郎

以下のSQLを実行すると、
SELECT distinct a.社員番号, a.社員氏名, b.所属番号
FROM 社員 a,所属 b
where a.社員番号 = b.社員番号
order by 所属番号

1 花子
1 花子
2 太郎

となってしまいます。
先に述べたとおりの結果を取得するにはどういうSQLを書いたらいいでしょうか?
お知恵を貸してください。宜しくお願いします。
Oracle8iを使用しています。
  

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>欲しい結果は、所属番号でソート


成るほど、分りました。
その場合は、どちらの所属番号でソートするのか決める必要があります。
例では花子の所属番号が両方とも太郎よりも若くなっていますが、もし太郎の番号が花子の番号の間に来たらどうしますか?
例えば所属番号が複数ある場合は大きい方を取る、という決まりにするなら

SELECT 社員番号, Max(所属番号) as 所属番号の最大
FROM 所属テーブル
GROUP BY 社員番号;

とかで社員番号に対応する所属番号をひとつにして、これと社員テーブルを連結して「所属番号の最大」でソートしたらどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/12 12:43

所属テーブルのデータを拝見するに、「花子」さんが所属に2つありますね。



所属テーブルとの結合により「花子」さんが2回(計3つ)が表示されています。

ORDER BY で所属番号順にする必要があるならばルールが必要でしょう。
(どれをソート用の所属とするか)

この回答への補足

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

補足日時:2002/02/08 21:32
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/12 12:49

ご質問のSQLを実行した結果は、



1 花子 10
1 花子 20
2 太郎 30  だと思います。

SELECT distinct a.社員番号, a.社員氏名
FROM 社員 a,所属 b
where a.社員番号 = b.社員番号

にすれば、期待の結果が得られると思います。

この回答への補足

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

補足日時:2002/02/08 21:29
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/12 12:47

Distinct は使いたくないのですか?



SELECT DISTINCT ~
と書いてやってみてください。

ただ、パフォーマンスは悪くなります。

この回答への補足

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

補足日時:2002/02/08 21:27
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/12 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング