- ベストアンサー
【SQL】SELECT 文で外部のレコードと比較する。
こんにちわ タイトルがわかりにくく申し訳ありません。^^;) 【やりたい事】 ○テーブルA に下記のレコードが有ります。 ID FIRSTNAME LASTNAME 00 ICHIRO SUZUKI 01 TARO YAMADA 02 TSUYOSHI SHINJYO ○テーブルB に下記レコードが有ります。 ID LASTNAME 00 SUZUKI 01 SASAKI ここで テーブルB に登録されている LASTNAME と同じ LASTNAME を持つレコードを テーブルA から抽出する SQL を教えて頂けないでしょうか? この状態で抽出されるレコードは 00 ICHIRO SUZUKI です。 お時間のある時で構いませんので、よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
データベースとして、何を使用されているか不明でしたので、Oracle で 確認してみました。 SQL> select * from tab1; ID FNAME LNAME ---------- ---------------- ---------------- 0 Ichiro Suzuki 1 Taro Yamada 2 Tsuyoshi Sinjyo SQL> select * from tab2; ID LNAME ---------- ---------------- 0 Suzu 1 Sasa 2 inj 上記の状態で、先頭一致をさせる場合 SQL> Select tab1.id, fname, tab1.lname from tab1, tab2 where substr(tab1.lname, 1, length(tab2.lname)) = tab2.lname; ID FNAME LNAME ---------- ---------------- ---------------- 0 Ichiro Suzuki 部分一致をさせる場合 SQL> Select tab1.id, fname, tab1.lname from tab1, tab2 where instr(tab1.lname, tab2.lname) > 0; ID FNAME LNAME ---------- ---------------- ---------------- 0 Ichiro Suzuki 2 Tsuyoshi Sinjyo でどうでしょうか? substr, instr と同等の関数は、Oracle 以外でも用意されていると 思いますので、他のデータベースでも使えると思います。
その他の回答 (2)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 どのSQLかわからないので、うまくいくかどうかはわかりませんが。 SELECT * FROM テーブルA WHERE LASTNAME IN (SELECT LASTNAME FROM テーブルB WHERE テーブルB.LASTNAME = テーブルA.LASTNAME) または、 SELECT * FROM テーブルA WHERE EXISTS (SELECT * FROM テーブルB WHERE テーブルA.LASTNAME = テーブルB.LASTNAME)
- AREC
- ベストアンサー率32% (23/70)
select * from A where LASTNAME in (select LASTNAME from B); で如何でしょうか?
補足
申し訳ありません。質問の内容をちょっと間違えました。 正確には テーブルBのレコードが ID LASTNAME 00 SUZU 01 SASA となります。 つまり完全一致ではないのです。 WHERE LASTNAME LIKE '%SUZU%' OR LASTNAME LIKE '%SASA%' と同様の抽出をしたいのです。
補足
申し訳ありません。質問の内容をちょっと間違えました。 正確には テーブルBのレコードが ID LASTNAME 00 SUZU 01 SASA となります。 つまり完全一致ではないのです。 WHERE LASTNAME LIKE '%SUZU%' OR LASTNAME LIKE '%SASA%' と同様の抽出をしたいのです。