2009年5月22日

[mysql 14870] Re: @変数の動作について

NKさん、返信ありがとうございます。


> 同一セッションで2回目実行時に期待する結果になっているのは、
> 前回実行の最後にセットしている"c"が残っているからのようです。


当初から、mysql> set @code='x'; 等はその都度実行していたのですが、

投稿時には抜け落ちてしまっていました。申し訳ありませんでした。

 メールのコードを私の環境で実行したのですが、やはり以下のように
なります。送っていただいた結果と比較すると、@code の値が違います。
抽出と並べ替えの順番が違っているのでしょうか。


set @code="";
select @code,if(T.code=@code,'same','new') as
Mark,@code:=T.code as Code,M.name
from T left join M on T.code=M.code order by T.code;
+-------+------+------+------+
| @code | Mark | Code | name |
+-------+------+------+------+
| | new | a | ASM |
| b | new | a | ASM |
| b | new | a | ASM |
| a | new | b | BAS |
| c | new | b | BAS |
| a | new | c | COM |
| a | new | c | COM |
+-------+------+------+------+
7 rows in set (0.00 sec)


こちらの環境は、WindowsXP
mysql Ver 14.12 Distrib 5.0.45, for Win32 (ia32)
Server version:5.0.45-community-nt MySQL Community Edition (GPL)
です。


> ユーザ変数を使用される前に、初期化すると初回実行時でも期待されて
> いる結果にはなりました。
>
> mysql> set @code="";select @code,if(T.code=@code,'same','new') as
> Mark,@code:=T.code as Code,M.name
> from T left join M on T.code=M.code order by T.code;
> Query OK, 0 rows affected
>
> +-------+------+------+------+
> | @code | Mark | Code | name |
> +-------+------+------+------+
> | | new | a | ASM |
> | a | same | a | ASM |
> | a | same | a | ASM |
> | a | new | b | BAS |
> | b | same | b | BAS |
> | b | new | c | COM |
> | c | same | c | COM |
> +-------+------+------+------+
> 7 rows in set

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

柴垣  akiro@xxxxx

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


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




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