質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

4回答

18100閲覧

テーブル結合 LIKE演算子

pinchhachance

総合スコア12

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/02/15 08:53

下記の状況で最適なSQLを作成したいのです。

【情報】
テーブル1 カラム名:項目X
テーブル2 カラム名:項目Y(※レコード内容は項目Xに文字列を付与したものが入っています)

手順1.ある条件を元にして、テーブル1の項目XのSELECTします。(結果は複数行返ってきます)
手順2.手順1のSELECT結果をWHERE条件にLIKE演算子の前方一致でテーブル2の項目YをSELECTします。

最終的には、手順2で前方一致でぶつからなかった項目Xの値を知りたいと思っています。
これをSQLにて効率的に実行するには、どのようなやり方が望ましいのでしょうか。
テーブル1とテーブル2を結合する際の条件にLIKE演算子を用いるとかですかね、、、?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

こんにちは。

SQL

1SELECT テーブル1.X FROM テーブル1 2LEFT JOIN テーブル2 ON テーブル2.Y LIKE テーブル1.X + '%'AND / OR テーブル2でさらに絞りたい条件式) 3WHERE テーブル2.Y IS NULL AND

手順1.と2.に「SELECTします」とありますが、これらの値自体はWHERE句の条件に使用したいとの意味であって、その値自体を最終的に欲しているのではないのですよね。

まず先頭のSELECT...で、最終的に欲しい列(最終的には...のところ)を指定します。
LEFT JOIN で「消したい条件(ぶつかった項目)の行」で外部結合させます。
最後に LEFT JOIN でくっついた(ぶつかった)「消したい条件の行」を "テーブル2.任意の列 IS NULL"(つまり、テーブル2がくっついていないものだけを残す)で消します。さらに消したい/残したい条件があれば、ON ...に AND / OR で条件を追加し、LEFT JOIN させるものを調整します。

投稿2017/02/20 02:19

編集2017/02/20 02:21
hsk

総合スコア728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

上記、自分の記述ミスでした。すいません。
テーブル2でもWHERE条件で絞りたいのですが、その場合の
SQLもご指南いただけませんでしょうか?

投稿2017/02/17 10:51

pinchhachance

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Xと同じ長さのYで比較して見つからない場合

sql

1select distinct col_x from hoge1 left join hoge2 2on col_x=substr(col_y,1,len(col_x)) 3where col_y is null;

投稿2017/02/15 09:49

編集2017/02/15 22:48
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな感じにしかならない気がしますね。

sql

1SELECT `項目X` FROM `テーブル1` 2EXCEPT 3SELECT 4 b.`項目X` 5FROM 6 `テーブル2` a 7INNER JOIN 8 (SELECT `項目X` FROM `テーブル1` WHERE "ある条件") b 9ON 10 a.`項目Y` LIKE b.`項目X` + '%'

投稿2017/02/15 09:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinchhachance

2017/02/17 10:29

ありがとうございます。 実際に作成してみたら、テーブルに名前をつけるところで 'a' 付近に不適切な構文があります。 のエラーが発生してしまいます。。
退会済みユーザー

退会済みユーザー

2017/02/20 01:28

エラー内容みないとはっきり言えないですけど、テーブルに別名を割り当てるときに『AS』を入れてみたりしたらどうでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問