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)
よろしくお願いします。
No.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文字目を当てはめればよいのかと
思っておりました。
アドバイス通りインデクスを定義する方向で
考えさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Access(アクセス) MAXで0が出力される 1 2022/03/31 21:43
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(IT・Webサービス) Google日本語入力の操作方法 一度確定した後の訂正方法 1 2023/06/17 16:03
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Windows 10 BitLocker 回復キーの入力 1 2022/10/09 15:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlserverで集計結果をUPDATEし...
-
ACCESSのSQLで、NULLかNULLでな...
-
sqlplusでバックスペースが効か...
-
オラクルではできるのにSQLSERV...
-
sqlserverで同一キー単位で金額...
-
MAX値を条件にデータを取得する...
-
アクセス 日付抽出(年月のみ)...
-
sqlserverで対象のレコードを削...
-
「マスタ」と「テーブル」の違...
-
Accessにインポートしたら並び...
-
SELECT時の行ロックの必要性に...
-
ACCESS2007 フォーム 「バリア...
-
Access VBA Me.Requery レコー...
-
SELECT文でのデッドロックに対...
-
クエリのキャンセルがいつにな...
-
ACCESS 一つのフィールドに複...
-
Accessでクエリを完了できませ...
-
Access 1レコードずつcsvで出力...
-
データの二重表示の原因
-
2つの項目が重複するレコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
sqlserverで集計結果をUPDATEし...
-
オラクルではできるのにSQLSERV...
-
アクセス 日付抽出(年月のみ)...
-
違いを教えてください
-
更新クエリでキー違反
-
MAX値を条件にデータを取得する...
-
AccessのSQLで、FROM句の構文エ...
-
プライマリーキーで同じ値をUPD...
-
シャープレジスター エラーコード
-
sqlplusでバックスペースが効か...
-
ACCESSで複数テーブルを結合し...
-
F1キーを押すの 英訳
-
sqlserverで同一キー単位で金額...
-
sqlserverで対象のレコードを削...
-
アクセスで複数テーブルの選択
-
Access 2010動きが遅い
-
AccessテーブルでのF6キーにつ...
-
DB構成<キーの考え方>
-
accessでのリンクテーブルの更新
おすすめ情報