
SQLの書き方について、お知恵を拝借致したくお願い致します。
Oracleで副問合せの結果を選択条件にする場合、WHERE 列名 IN (副問合せの結果)
と書きますが、その結果をワイルドカードとして取り扱う方法は無いでしょうか?
例えば、
CD
--------
101
10101
10102
201
20101
とある時に、
CD
--------
10101
10102
を抽出したい場合、
SELECT CD FROM SOSHIKI WHERE CD IN
(SELECT CD||'%' FROM SOSHIKI WHERE CD LIKE '1__')
というように、SQLを書くことは出来ないでしょうか?
(注)他の選択条件とマージする必要があるので、単純に
SELECT CD FROM SOSHIKI WHERE CD LIKE '1_____';
と書くことは出来ないことが前提です。
No.1ベストアンサー
- 回答日時:
EXISTSでいけませんかね?
SELECT * FROM SOSHIKI as t1 WHERE EXISTS(
SELECT CD||'%' as CD2 FROM SOSHIKI WHERE CD LIKE '1__'
GROUP BY CD HAVING t1.cd LIKE CD2
)
yambejpさん、コメント頂きましてどうも有難うございました。
不勉強なもので、この構文をはっきり理解できてないのですが、機械的に当てはめてみたところ、LIKEの後ろに自分自身で定義した別名は書けないようで、無効な識別子というエラーが出てしまいます。
No.2
- 回答日時:
Oracleだと無理ですかねぇ、mysqlなら行けたんですが。
(mysqlの場合はconcatの文法がちがいますが)
ちなみにgroup byではなくサブクエリでもダメでしょうか?
SELECT * FROM SOSHIKI as t1 WHERE EXISTS(
SELECT 1 FROM(
SELECT CD||'%' as CD2 FROM SOSHIKI WHERE CD LIKE '1__'
) AS t2 WHERE t1.cd LIKE t2.CD2
)
有難うございました。
SELECT * FROM SOSHIKI as t1 WHERE EXISTS(
SELECT CD||'%' as CD2 FROM SOSHIKI WHERE CD LIKE '1__'
AND t1.cd LIKE CD||'%'
)
で通りました。
これで問題ないのか、よく検証してみます。
どうも有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
SQLでlike検索条件を副問い合わせ結果にしたい
Oracle
-
2つのテーブルをLIKE演算子のように結合させたい
その他(データベース)
-
LIKEの右側にカラムを指定できますか?
MySQL
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
6
【Access】クエリで抽出したデータをCSV形式でエクスポートできますか?
Access(アクセス)
-
7
Oracleでの文字列連結サイズの上限
Oracle
-
8
【Transact-sql】 execの結果をoutputパラメータに持たせたい
SQL Server
-
9
like演算子内に変数って使えないんですか?
その他(プログラミング・Web制作)
-
10
sqlplusでヘッダーが付かない
Oracle
-
11
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
12
データベースのINT型項目にNULLはNG?
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
副問合せにLIKE文を使う方法は...
-
SQL開発環境ソフトウェアである...
-
MySQLカラム名は日本語と英数字...
-
テーブル作成でエラーが出てき...
-
VBAで変数内に保持された二次配...
-
mysqlのsecure-file-privオプシ...
-
MySQLの型のサイズ指定で速度は...
-
MySQLに関して
-
Excel VBA SelectedItems
-
MySQLのLOAD DATA INFILEコマン...
-
「・」中点が入った文字列を条...
-
ODP.NETのバージョン確認
-
mysqlがインストールされている...
-
Windows に Postgres 旧バージョン
-
DBから取得した値を加工して別...
-
JDBCドライバについて
-
SQLServerのコンピュータ名変更...
-
配列の要素でmysqlに問い合わせ
-
like句を使って日本語を検索す...
-
MySQLとAccess
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
副問合せにLIKE文を使う方法は...
-
RPMのmysqlとmysql-serverの違い
-
ライセンスについて
-
チューニングの基礎について教...
-
MySQL のコマンドが実行出来ま...
-
Class::DBIの使い方を教えてく...
-
MYSQLについて
-
mysqlの文字につて教えてください
-
mySQLのスピード
-
OSXでMySQL、root権限で立ち上...
-
ソケットのエラーについて
-
mysqlにおいての文字化け
-
よくわかるPHPの教科書で勉強中...
-
MySQL Version4 のダウンロード先
-
WindowsXP x64で使える MySQLの...
-
x86_64環境のMySQLversion3.23....
-
かねやんMySqlをつかってサーバ...
-
xcopyができない
-
MySQLの地理情報の取り扱いにつ...
-
■MySQL 5.0.45 の使い方
おすすめ情報
試行錯誤のうえ、
SELECT * FROM SOSHIKI as t1 WHERE EXISTS(
SELECT CD||'%' as CD2 FROM SOSHIKI WHERE CD LIKE '1__'
AND t1.cd LIKE CD||'%'
)
で通りました。
これで問題ないのか、よく検証してみます。
どうも有難うございました。