UNION の結果セット内のカラムの型と長さでは、すべての SELECT ステートメントで取り出された値が考慮されます。 MySQL 4.1.1 より前のバージョンの UNION では、最初の SELECT で使用された値のみに基づいて結果の型と長さが決まる、という制約がありました。 この場合、たとえば、最初の SELECT の値よりも長い値が 2 番目の SELECT で取り出されると、切り捨てが行われることがあります。
(SELECT a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM table_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
ORDER BY a;
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a |
| b |
+---------------+
MySQL 4.1.1 以降、この制約はなくなりました。
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a |
| bbbbbbbbbb |
+---------------+
http://dev.mysql.com/doc/refman/4.1/ja/union.html
Mysql4.0で、対処する場合は、
最初にダミーテーブルをunionで作って、
文字列の長さを長くしておいて
SELECT REPEAT('a'100)
UNION
SELECT REPEAT('a',1)
UNION
SELECT REPEAT('b',10);
プログラム側で、一番最初のレコードを取得しないみたいな感じでやるとできた
1 / 2| 次のページ »
[コメントが多かった順の記事]・人の心理の裏をかくホームページ集客術:リピータになってもらうためには(233)
・ホームページ心理学第2弾「メールの書きだしとホームページ運営・集客の関係」(76)
・娘が生まれた(69)
・ゲームと言えば、何を思い出す? (50)
・Microsoftからアクセス (30)
・「目標の立て方」と「努力」と「実行力」(26)
最近のコメント