- - PR -
SQL Serverでの inner join
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-11-29 12:30
これだけの情報では、無理です。できません。
まず name2 ではなく name1 を取り出す選択基準を示してください。 (辞書順の先頭レコードを選択するなど) |
|
投稿日時: 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 |
|
投稿日時: 2004-11-29 12:35
mineさん、こんにちは。
提示されている例はかなり簡略化しているのだとは思いますが、JOINがどうこうの前に、TABLEBから a name1 b name3 c name4 というレコードを抽出する方法をまずは考えてみて下さい。 name1、name2のうち、name1 だけが必要となる根拠を考えればできると思います。 |
|
投稿日時: 2004-11-29 14:42
返答ありがとうございます。
言葉たらずで申し訳ありませんでした。 >まず name2 ではなく name1 を取り出す選択基準を示してください。 選択基準は正に「辞書順の先頭レコードを選択する」です。 uk様の返答で目的にあっています。 ありがとうございます。 自分としては TABLEAに存在するレコードだけをTABLEBから取り出したかったのですが inner joinで結合すれば自分の思う結果(3レコードのみ)が得られると思っていたのですが group byを使用する必要があったのですね。 実際にはもう少し複雑なので自分で考えてみます。 どうもありがとうございました。 |
1