dポイントプレゼントキャンペーン実施中!

テーブルAのnameカラムに5万件の名前があり、テーブルBのkanjiカラムには500件の漢字があります。

テーブルA
nameカラム
青井一郎
赤衣智
宇野陽子
.
.
(5万件の名前)


テーブルB
kanjiカラム



.
.
(500件の漢字)


テーブルBのkanjiカラムにまだ登録されていない、テーブルAのnameカラムに登録されている漢字を抽出したいのですが、どのようなSQLなら可能でしょうか?

よろしくおねがいします。

質問者からの補足コメント

  • アドバイスありがとうございます。

    下記のselectは「テーブルAの名前を漢字1文字づつにした上で、重複しない全部の漢字を羅列するクエリー」であってますでしょうか?

    select substr(name,1,1) from テーブルA
    union select substr(name,2,1) from テーブルA
    union select substr(name,3,1) from テーブルA
    union select substr(name,4,1) from テーブルA
    union select substr(name,5,1) from テーブルA
    (略)


    その羅列されたクエリー結果の中から、テーブルBにまだ登録されていない漢字を見つけ出すにはどのようにしたらいいのでしょうか。

    的外れの質問だったら申し訳ありません。よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/06/12 17:24

A 回答 (2件)

失礼しました、羅列でしたね



create table テーブルA(name varchar(10));
insert into テーブルA values('青井一郎'),('赤衣智'),('宇野陽子');
create table テーブルB(kanji varchar(1));
insert into テーブルB values('青'),('赤'),('白');

select name from(
select substr(name,1,1) as name from テーブルA
union select substr(name,2,1) from テーブルA
union select substr(name,3,1) from テーブルA
union select substr(name,4,1) from テーブルA
union select substr(name,5,1) from テーブルA
union select substr(name,6,1) from テーブルA
) as t1
left join テーブルB as t2 on t1.name=t2.kanji
where t2.kanji is null and t1.name!=''
    • good
    • 0
この回答へのお礼

ありがとうございました!助かりました!

お礼日時:2017/06/14 23:43

nameなんて所詮長くても10文字程度なので、羅列すればいいでしょう


こんな感じですか?

create table テーブルA(name varchar(10));
create table テーブルB(kanji varchar(1));

insert into テーブルA values('青井一郎'),('赤衣智'),('宇野陽子');
insert ignore into テーブルB(kanji)
select substr(name,1,1) from テーブルA
union select substr(name,2,1) from テーブルA
union select substr(name,3,1) from テーブルA
union select substr(name,4,1) from テーブルA
union select substr(name,5,1) from テーブルA
union select substr(name,6,1) from テーブルA
union select substr(name,7,1) from テーブルA
union select substr(name,8,1) from テーブルA
union select substr(name,9,1) from テーブルA
union select substr(name,10,1) from テーブルA
この回答への補足あり
    • good
    • 0

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