これが私の質問です:
INSERT INTO `temp_map_196`
(SELECT DISTINCT
NULL,NULL,NULL,
t1.`price`,
t1.`price`,
COUNT(*) AS `count`
FROM `raw_table_1` t1
GROUP BY `price`
ORDER BY `count` DESC)
t1.price
はDECIMAL
列です。値が列に挿入されていvarchar
ます。
1, 10, 10.5
すべて正しく挿入されます。
しかし1.6
、1.8
なり1.60000002384186
、1.79999995231628
クエリをこれに変更すると:
INSERT INTO `temp_map_196`
(SELECT
NULL,NULL,NULL,
1.6,
1.6,
1
)
すべてが正常に動作します。
元のクエリを次のように変更すると、すべてが機能します。
INSERT INTO `temp_map_196`
(SELECT DISTINCT
NULL,NULL,NULL,
CAST (t1.`price` AS DECIMAL(8,2)),
CAST (t1.`price` AS DECIMAL(8,2)),
COUNT(*) AS `count`
FROM `raw_table_1` t1
GROUP BY `price`
ORDER BY `count` DESC)
しかし、列が常に10進値を受け取るとは限らないため、それはできません。
ソースデータに含まれていないように見えるのに、MySQLがこれらの奇妙な小数を挿入するのはなぜですか?(クエリのSELECT
一部を取得INSERT
してそれ自体を実行すると、そのような奇妙な値はありません)。