質問: sqlで複数データベースの一致比較する方法 sql文のみを用いて値の検索結果を元にまた検索を行い、さらにその結果をもとに検索結果の中身を参照して比較する方法を探しています。 例として、データベース内に図のような4つのテーブルがあるとします。 地域情報aと都道府県名a、地域情報bと都道府県名bはセットと考えます。 地域情報には、地域ごとに対応する番号があり、都道府県名には地域情報の番号と、それに対応した件名が記述してあります。 (例えば、東北は001番で、001番(東北)には青森・岩手が存在する、と読みます) このようなデータベースがあるとき、入力として「中部」「北陸」があったとします。 すると、1つ目の入力(中部)は地域情報aからその番号を探し,その番号を元に都道府県名aから県名を探します。 同様にして、2つ目の入力(北陸)もbのテーブルから値を検索します。 すると、1つ目の入力に対して「愛知・福井」、2つ目の入力に対しては「福井・石川」が出力されます。 最後に、1つ目の出力結果と2つ目の出力結果を比較して、同じ都道府県名が含まれていれば 1 を、含まれていなければ -1 を出力します。 ここではどちらも「福井」が含まれているので、最終的な出力結果は「1」になります。 ということをやりたいと思っています。 現在、c言語で、2つの出力結果(県名)をそれぞれ配列に格納して、2つの配列の中身を比較、for文とstrcmpで配列に一致する県名があるかを確認、ということをしていますが、 入力に応じてsql問い合わせが4回と配列の中身の一致比較のためにfor文を2重に回しているため、実行速度が遅いのが気になります。 これをc言語を使わず、sql文のみで完成させるには、どういったsql文を書けば良いのでしょうか? また、実際に実行するとして、データ検索にsql・一致比較にc言語を使う場合、全てsqlのみで実行する場合 ではどちらが処理時間が短くなるのでしょうか? ただし、実際は地域情報a・bにはレコードが1000件以上、都道府県名a・bには各地域ごとにレコードが5件程度あることを想定しています。 今回は例のためこのような書き方になっていますが、実際に扱うデータに文字列はなく、すべて数値データです。 長文になってしまいましたが、対応の仕方を知りたいと思っています。 よろしくお願いします。
回答: すなおにやればこんな感じでしょうか? //準備 create table tiikia(id int,name varchar(30)); create table tiikib(id int,name varchar(30)); create table kena(id int,name varchar(30)); create table kenb(id int,name varchar(30)); insert into tiikia values(1,'東北'),(2,'関東'),(3,'中部'),(4,'九州'); insert into tiikib values(1,'関西'),(2,'中国'),(3,'四国'),(4,'北陸'); insert into kena values(1,'青森'),(1,'岩手'),(2,'埼玉'),(2,'千葉'),(3,'愛知'),(3,'福井'),(4,'鹿児島'); insert into kenb values(1,'大阪'),(2,'鳥取'),(3,'徳島'),(4,'福井'),(4,'石川'); //実行 select if(count(*)>0,1,-1) as kekka from (select kena.name from kena inner join tiikia on tiikia.id=kena.id and tiikia.name='中部') as suba inner join (select kenb.name from kenb inner join tiikib on tiikib.id=kenb.id and tiikib.name='北陸') as subb on suba.name=subb.name;