- ベストアンサー
2つのテーブルをLIKE演算子のように結合させたい
こんにちは DB2 ver 8.1 fixPak5 VB6 にて開発を行っております。 TABLEa の NAMAEa KANKEIa TABLEb の ADANAb FLAG というテーブルがあるとします そしてそれぞれのテーブルに TABLEa のNAMAEa に '山田' TABLEb のADANAb に '山' というデータがはいっていたとき この2つのデータをLIKE演算子のように結合させたいのですが、どのようにしたらいいのでしょうか。 イメージとしては SELECT NAMAEa, KANKEIa, FLAG FROM TABLEa LEFT OUTER JOIN TABLEb ON NAMAEa LIKE ADANAb% 伝わるでしょうか・・・ できたら1つのSQL文で完結させたいです。 駄目だったらRecordSetにもたせて処理しようかと思いますが、 今後の為にも何か方法があるのでしたら教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 マニュアルを確認してみました・・・。 LIKE演算子の右側には、まずString式が必要ですね・・・。 後は何をくっつけてもいいみたいです。 つまり、いきなり列名が来ているのがダメという事です。 ちなみにPOSSTR関数の場合は、検索される側は、列名でもOKですが・・・。 %列名%もダメですよねぇ。 なんかいい方法が思いつきません・・・。 ※そもそも、なんでADANAbのテーブルにNAMAEaがないの??? リレーショナルになってないような・・・? (^^ゞ
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
ON NAMAEa LIKE ADANAb || '%' こんな感じで、%は文字列としてADANAbにつなげてください。ただし、ADANAbが固定長文字列のフィールドでしたら余分なスペースを取る必要があるかもしれません。 #DB2の文字列結合演算子、||でしたっけ? 違ってたらごめんなさい。正しい演算子に置き換えてください。
お礼
回答ありがとうございます。 taka451213様のところにも書きましたが、うまくいきませんでした。 DB2の文字列結合は ||かCONCATですね。 どちらでもうまくいきませんでした。><
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 DB2って、マニュアル少ないんですよねぇ・・・。 多分それでいいと思いますよ。 NAMAEa LIKE (ADANAb || '%') 動かないかも・・・。 (^^ゞ
お礼
回答ありがとうございます。 私も実は試したんですが 「最初のオペランドがストリング式でないか、または 2番目のオペランドがストリングではないため、LIKE 述部、またはPOSSTR スカラー関数が無効です。SQLSTATE=42824」 と出て無効でした。列指定はできないみたいです。 上のエラーのように、POSSTR関数(oracleでいえばinstr?)でも試したんですが、結果同じでした。
お礼
何回も回答ありがとうございます。 >※そもそも、なんでADANAbのテーブルにNAMAEaがないの??? >リレーショナルになってないような・・・? 実はADANAbのテーブルは他システムのデータをコンバートしたものを放り込んだテーブルなのです。 しかもそういうデータが定期的に送られてくる環境です。そういうこともあって、データが完全に結合できる状態ではないので、それを整えるちょっとしたツールを作ろうか、ということでこんなややこしいことになっています。。 oracleだったらinstr(a,b) > 0でいけるのに・・・ DB2だと私も思いつかないので質問してみました。
補足
ひょっとしたらそのようなことをできる機能・テクニック自体存在しないかもしれないので、すこししたら、質問閉じさせていただきます。 皆さんに時間を割かせすぎるのも申し訳ないので・・・