![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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件程度あることを想定しています。
今回は例のためこのような書き方になっていますが、実際に扱うデータに文字列はなく、すべて数値データです。
長文になってしまいましたが、対応の仕方を知りたいと思っています。
よろしくお願いします。
![「SQLで複数データベースの一致比較する方」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/c/1810100_5497d14fa939d/M.jpg)
No.1ベストアンサー
- 回答日時:
すなおにやればこんな感じでしょうか?
//準備
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;
ありがとうございます.
SQLでこんな処理も可能だったんですね.
このくらいの処理がさらっと書けることを目指して頑張ります.
処理時間がCと併用するときに比べて約1/10になりました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- Java Java 南京錠 2 2023/02/04 11:46
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- 転職 長く続けられる好条件の求人でしょうか? 3 2023/07/12 18:45
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
エラー 1068 (42000): 複数の主...
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
MySQL 複数個の値を取るカラム...
-
VIEWの元のテーブルのindexって...
-
Updateの複数テーブル条件時のL...
-
エクセルの関数について教えて...
-
SQL Left Join で重複を排除す...
-
LEFT JOIN と GROUP BY
-
SQLについての質問
-
WordpressのContact form 7でzi...
-
VBAでボタンをクリックする方法...
-
LEFT JOINが2つあるSQL文でAND...
-
バインド変数について
-
上位3位を求めるSQL文は?
-
【初心者】特定の文字に色をつ...
-
カラム名でseqとidではどちらが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
Unionした最後にGROUP BYを追加...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報