電子書籍の厳選無料作品が豊富!

2つのテーブル(A、B)を結合してデータを取得したいのですが、
TableBのキーの2文字目を無視して検索したいのです。
例)
テーブルA テーブルB
キー 値 キー 値
1001 1 1101 1
1002 2 1012 2
1003 3 1003 3
1004 4 1104 4
1202 5
1303 6
結果
キー  A.値   B.値
1001 1 1
1002 2 5
1003 3 3
1003 3 6
1004 4 4


以下のSQL文を作ってみたのですが、
時間が非常にかかってしまうので
よい方法を知りたく思っています。

SELECT A.キー, A.値, B.値
FROM テーブルA
INNER JOIN テーブルB
ON A.キー = LEFT(B.キー,1) + SUBSTRING(A.キー, 1, 1)
+ RIGHT(B.キー, LEN(B.キー) - 2)


よろしくお願いします。

A 回答 (1件)

投稿した内容を見て、他人が理解できる内容か、確認していますか?



例)
テーブルA テーブルB
キー 値 キー 値
1001 1 1101 1
1002 2 1012 2
1003 3 1003 3
1004 4 1104 4
1202 5
1303 6

得たい結果から見ると、次の2行は、テーブルBの値ではないのですか?
1202 5
1303 6

質問者さんが考えたSQLで、
SUBSTRING(A.キー, 1, 1)
は、質問内容の説明にないことをやっていますが?

>時間が非常にかかってしまうので

多くのRDBMSでは、インデクスを付けた列でも、関数などで演算してしまうとインデクスを有効利用できません。SQL Serverでは、プライマリキーを優先して使うようですが、この表でのインデクス定義内容が分かりません。

>よい方法を知りたく思っています

キーの2番目の文字を取り除いた値を、双方の表の列に持ち、インデクスを定義しておく方法がいいと思いますけど?

この回答への補足

ご指摘、ありがとうございます。

>得たい結果から見ると、次の2行は、テーブルBの値ではないのですか?
>1202 5
>1303 6
おっしゃるとおりです。
質問内容に書いた内容がずれてしまっており、
意図した質問と異なってしまっていました。
確認不足です。申し訳ございません。

>質問者さんが考えたSQLで、
>SUBSTRING(A.キー, 1, 1)
>は、質問内容の説明にないことをやっていますが?
ここは、間違えて書いています。
SUBSTRING(A.キー, 2, 1) として、2文字目を当てはめればよいのかと
思っておりました。

アドバイス通りインデクスを定義する方向で
考えさせていただきます。

補足日時:2007/06/01 09:11
    • good
    • 0

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