• ベストアンサー

【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 です。 お時間のある時で構いませんので、よろしくお願い致します。

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

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.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)
回答No.2

こんにちは。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)

sho_ta
質問者

補足

申し訳ありません。質問の内容をちょっと間違えました。 正確には テーブルBのレコードが ID LASTNAME 00 SUZU 01 SASA となります。 つまり完全一致ではないのです。 WHERE LASTNAME LIKE '%SUZU%' OR LASTNAME LIKE '%SASA%' と同様の抽出をしたいのです。

  • AREC
  • ベストアンサー率32% (23/70)
回答No.1

select * from A where LASTNAME in (select LASTNAME from B); で如何でしょうか?

sho_ta
質問者

補足

申し訳ありません。質問の内容をちょっと間違えました。 正確には テーブルBのレコードが ID LASTNAME 00 SUZU 01 SASA となります。 つまり完全一致ではないのです。 WHERE LASTNAME LIKE '%SUZU%' OR LASTNAME LIKE '%SASA%' と同様の抽出をしたいのです。