08/02: MySQL > よく忘れる、落とし穴的SQL
- COALESCE(param1, param2, ...)
- 最初にNULLでない値を返す。
- CONCAT_WS(separator, str1, str2,...)
- 区切り文字付きの CONCAT(CONCAT With Separator)。separatorがNULLだとNULLを返すが、CONCATと違って、strXがNULLだとその文字列はスキップされる。
- カラムタイプ DATEとDATETIME
- 変換しないでそのまま比較すると、結果がおかしい
- JOIN句の比較とWhere句の比較は結果が異なる
- select * from a left join b on a.id=b.id and b.id is null;
select * from a left join b on a.id=b.id where b.id is null; - テーブルの定義を表示するには
- SHOW CREATE TABLE table_name;
- SELECTで変数をセットするときLIMITに注意
- select @val := col_a from a limit 0, 1;
とすると、なぜか@valには最後のcol_aが代入される - SELECTでWHERE句に変数を使用するとき宣言に注意
- SELECT * FROM a WHERE @myVal IS NULL OR a.col = @myVal;
で、SET @myVal = NULL; が事前に有ると無いのでは結果が異なる - Unsigned subtraction
-
In some cases where an unsigned subtraction would have resulted in a signed integer, it now results in an unsigned integer.
For example, "SELECT column_int - 1 FROM t;" If column column_int is unsigned integer and value is 0, the result is 18446744073709551615, not -1.
To get the older behavior, use CAST(i - 1 AS SIGNED) to convert the expression result to a signed value.