
以下のSQLで想定のレコードが取得できず0件になります。
副問い合わせ側SQLが「'111','333','222'」といった具合に文字列が取得できるのは確認できています。
※文字列編集の''''のところが合ってるかどうか訳あって微妙ですが、このような形だったはずです。
SELECT * FROM AAA WHERE NO IN
(REPLACE(REPLACE(
(SELECT NO FROM BBB)
,'NO',''''),'NO','''' + ',') + '''' + '222' + ''''
FOR XML PATH('')
)
試しに以下を実行すると想定通りデータが引きあたり3件データが出るといった具合です。
SELECT * FROM AAA WHERE NO IN ('111','333','222')
FOR XML PATH('')ではこのような形はできないんでしょうか?
またin句やexistsでも良いのですが、上記形式でできない理由が釈然とせず質問させてください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> 副問い合わせ側SQLが「'111','333','222'」といった具合に文字列が取得できるのは確認できています。
これは「『'111','333','222'』という1つの文字列」なのであって、「'111','333','222'という3つの文字列」ではありません。
SQLで直接書くなら
SELECT * FROM AAA WHERE NO IN ( '''111'',''333'',''222''')
SELECT * FROM AAA WHERE NO = '''111'',''333'',''222'''
と同等ということになります。
回答ありがとうございます。度重ね質問すみません。
以下の場合に修正した場合、
SELECT * FROM AAA WHERE NO IN
(REPLACE(REPLACE(
(SELECT NO FROM BBB)
,'NO',''),'NO','' + ',') + '' + '222' + ''
FOR XML PATH('')
)
↓これと同等でしょうか?一つ目の'はエスケープシーケンスで2つ目は'そのものと思っています。これなら想定結果が望めますでしょうか?
SELECT * FROM AAA WHERE NO IN ( '111','333','222')
SELECT * FROM AAA WHERE NO = '111','333','222'
No.2
- 回答日時:
FOR XML PATH は「一つの文字列」にまとめる、というものです。
それをREPLACEで加工しても「一つの文字列」であることに変わりはありません。
文字列の中がカンマで区切られていても「カンマを含んだ一つの文字列」でしかありません。
今のSQLでは、REPLACEで加工したところで
SELECT * FROM AAA WHERE NO IN ( 一つの文字列 )
という形は変化しません。IN の候補が一つだけなので、
SELECT * FROM AAA WHERE NO = 一つの文字列
と同等です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLServer2012、FOR XML PATH('...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
sqlplusのspoolで空白行出現
-
Excel VBAで「プログラム実行」...
-
【Excel VBA】 WorksheetやRa...
-
エクセルVBAでUserFormを起動し...
-
ODBCリンクの際にACCESSでは読...
-
キャッシュを使わずにSELECTを...
-
callで順に実行されるプロシー...
-
Access VBAで行ラベルが定義さ...
-
PL/SQLカーソルの2重FORループ...
-
ストアドプロシジャからストア...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLで部分的にGROUP BYしたいとき
-
sqlplusでヘッダーが付かない
-
Accessの数値から時間に変換す...
-
重複するIDのデータを1行にま...
-
日付型カラムへのデータINSERT
-
SQL*Plusの終了はquit?exit?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer2012、FOR XML PATH('...
-
ASP.NETのCheckboxlistコントロ...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
キャッシュを使わずにSELECTを...
-
ODBCリンクの際にACCESSでは読...
-
日付型カラムへのデータINSERT
-
PL/SQLカーソルの2重FORループ...
-
sqlplusでヘッダーが付かない
-
ストアドプロシジャからストア...
-
SQL*Loaderでのsysdate使用
-
callで順に実行されるプロシー...
-
全角空白のTRIMができない...
-
【Excel VBA】 WorksheetやRa...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
PL/SQLでSPOOLさせたいのですが...
-
sqlplusのspoolで空白行出現
-
今日の日付が入った行のデータ...
おすすめ情報