[前][次][番号順一覧][スレッド一覧]

mysql:14868

From: 柴垣 <柴垣 <akiro@xxxxxxxxxx>>
Date: Fri, 22 May 2009 00:44:00 +0900
Subject: [mysql 14868] @変数の動作について

柴垣といいます。
@変数を使ったsql文の動作について、気づいたことを書きます。

例えば、下のようなテーブル T があって
+------+
| code |
+------+
| a    |
| b    |
| a    |
| c    |
| b    |
| a    |
| c    |
+------+

select if(T.code=@code,'same','new') as Mark,@code:=T.code as Code
from T order by T.code;

としてソートすると、下のような結果が返ってきます。
+------+------+
| Mark | Code |
+------+------+
| new  | a    |
| same | a    |
| same | a    |
| new  | b    |
| same | b    |
| new  | c    |
| same | c    |
+------+------+
ここまでは期待通りです。


ところが、下のような別のテーブル M を用意して、
+------+------+
| code | name |
+------+------+
| a    | ASM  |
| b    | BAS  |
| c    | COM  |
+------+------+

select 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;

のようにnameフィールドを付け加えて出力しようとすると、
+------+------+------+
| Mark | Code | name |
+------+------+------+
| new  | a    | ASM  |
| new  | a    | ASM  |
| new  | a    | ASM  |
| new  | b    | BAS  |
| new  | b    | BAS  |
| new  | c    | COM  |
| new  | c    | COM  |
+------+------+------+
となってしまいます。

「from」の部分を、fromT,M と書いてみたりすることから始めて
多くの行からこのデータセットが抽出されていく過程を追うことで
@code の挙動は一応理解したのですが、出力を
+------+------+------+
| Mark | Code | name |
+------+------+------+
| new  | a    | ASM  |
| same | a    | ASM  |
| same | a    | ASM  |
| new  | b    | BAS  |
| same | b    | BAS  |
| new  | c    | COM  |
| same | c    | COM  |
+------+------+------+
とする工夫はないものでしょうか。
(あまり一般性がないかもしれない内容で、申し訳ありません。)


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

 柴垣  akiro@xxxxxxxxxx

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



[前][次][番号順一覧][スレッド一覧]

->   14868 2009-05-22 00:44 [柴垣 <akiro@xxxxxxxx] @変数の動作について                     
     14869 2009-05-22 01:44 ┗["N.K." <nakai.kanako]                                       
     14870 2009-05-22 09:16  ┗[柴垣 <akiro@xxxxxxxx]                                     
     14871 2009-05-22 09:50   ┗["N.K." <nakai.kanako]                                   
     14872 2009-05-22 12:06    ┗[柴垣 <akiro@xxxxxxxx]