- PR -

SQL Serverでの inner join

1
投稿者投稿内容
mine
会議室デビュー日: 2002/10/25
投稿数: 9
投稿日時: 2004-11-29 12:00
TABLEA
KEY1
--------
a
b
c

TABLEB
KEY1 NAME
-------- ------
a name1
a name2
b name3
c name4

上記2つのテーブルがあるときに
select * from TABLEA inner join TABLEB on TABLEA.key1=TABLEB.key1
というSQL文を実行すると
KEY1 KEY1 NAME
-------- -------- ------
a a name1
a a name2
b b name3
c c name4
という結果になります。
これを以下のような結果を取得するにはどうすればよいのでしょうか?

KEY1 KEY1 NAME
-------- -------- ------
a a name1
b b name3
c c name4

よろしくお願いします。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-11-29 12:30
これだけの情報では、無理です。できません。
まず name2 ではなく name1 を取り出す選択基準を示してください。
(辞書順の先頭レコードを選択するなど)
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-29 12:31
どういう基準でkey1がaのレコードからNAMEがname1であるレコードを選別しているのか
わかりませんが、これで目的に合っていますか?

select TABLEA.key1, MIN(NAME) from TABLEA
inner join TABLEB on TABLEA.key1=TABLEB.key1
group by TABLEA.key1
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-11-29 12:35
mineさん、こんにちは。

提示されている例はかなり簡略化しているのだとは思いますが、JOINがどうこうの前に、TABLEBから

a name1
b name3
c name4

というレコードを抽出する方法をまずは考えてみて下さい。
name1、name2のうち、name1 だけが必要となる根拠を考えればできると思います。
mine
会議室デビュー日: 2002/10/25
投稿数: 9
投稿日時: 2004-11-29 14:42
返答ありがとうございます。

言葉たらずで申し訳ありませんでした。

>まず name2 ではなく name1 を取り出す選択基準を示してください。

選択基準は正に「辞書順の先頭レコードを選択する」です。

uk様の返答で目的にあっています。
ありがとうございます。

自分としては
TABLEAに存在するレコードだけをTABLEBから取り出したかったのですが
inner joinで結合すれば自分の思う結果(3レコードのみ)が得られると思っていたのですが
group byを使用する必要があったのですね。

実際にはもう少し複雑なので自分で考えてみます。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)