2010年9月13日

[mysql 15395] Re: 文字列を返す関数で質問です

とみたさん
返信ありがとうございます。

> select * from テーブルA where col1 in ('111,222')
[お返事]
もし上記の通り評価されていれば、結果は0レコードになります。
結果は「select * from テーブルA where col1 in (111)」または
「select * from テーブルA where col1 in ('111')」」の結果でした。


とりあえず、今は一度INの中身に直接関数名を記述しないで、結果を一度変数に
持ちINの中身へ変数をセットしています。それならうまくいくようです。この変
数とはPHP上の変数です。
ということで、この話題は私的にはCLOSEでよいかと思ってます。

On Sun, 12 Sep 2010 21:44:50 +0900
とみたまさひろ <tommy@xxxxx> 様から以下のようなメールをいただきました。。:

> とみたです。
>
> On Fri, 10 Sep 2010 14:05:55 +0900
> こんにちは伊藤です <ito.takahiro.cp@xxxxx> wrote:
>
> > 文字列型を返す関数で、「ん?」と思われる現象です。
> > クエリで文字列を返す関数を使うと、リターンにカンマが入っている場合、カン
> > マの前しか取得されないようです。
> 〜中略〜
> > ↓下記は正常
> > select getXX(1) ⇒ 111,222
> >
> > ↓これはNG
> > select * from テーブルA where col1 in (getXX(1))
> > ⇒col1=111しか取得できない。col1=222もほしかった!
> >
> > クエリ文中で使うとリターンにカンマがある場合、カンマの前しか返さないらし
> > い。リターンをvarcharやcharにしても同じでした。
>
> これは次のように評価されているということです。
>
> select * from テーブルA where col1 in ('111,222')
>
> つまり in の中に 111 と 222 という2つの値を指定しているんではなく
> て、'111,222' という1つの値を指定してることになってます。
>
> 「111 in ('111,222')」は真だけど「222 in ('111,222')」は偽なので、111
> しか取得できないんですね。
>
> --
> とみたまさひろ <tommy@xxxxx>
> 日本MySQLユーザ会 http://www.mysql.gr.jp


-------------------------------------------------
伊藤崇洋
ito.takahiro.cp@xxxxx
-------------------------------------------------

投稿者 xml-rpc : 2010年9月13日 10:59
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/98331
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。