Mysql 浮点数与子查询
我有疑问:Mysql 浮点数与子查询,mysql,sql,Mysql,Sql,我有疑问: SELECT DISTINCT `g`.`id` , `g`.`steam_id` , `g`.`type` , `g`.`title` , `g`.`price` , `g`.`metascore` , `g`.`image` , ( SELECT `id` FROM `game_promotions` WHERE `game_promotions`.`gam
SELECT
DISTINCT `g`.`id` ,
`g`.`steam_id` ,
`g`.`type` ,
`g`.`title` ,
`g`.`price` ,
`g`.`metascore` ,
`g`.`image` ,
(
SELECT `id`
FROM `game_promotions`
WHERE `game_promotions`.`game_id` = `g`.`id`
) AS `promotion_id`,
(
SELECT `price`
FROM `game_promotions`
WHERE `game_promotions`.`game_id` = `g`.`id`
) AS `promotion_price`,
(
SELECT COUNT( `id` )
FROM `bot_games`
WHERE `game_id` = `g`.`id`
AND `buyer` IS NULL
) AS `copies`
FROM
`games` AS `g` ,
`game_genres` AS `gg`
WHERE
`gg`.`game_id` = `g`.`id`
AND `g`.`title` LIKE "Counter%"
GROUP BY `promotion_id`
LIMIT 0 , 30
问题是退货不良
促销\u价格
。在game\u promotions
表中,price
为“24.99”,但在查询结果promotion\u price
中为“14.989997711182”。返回的促销ID是好的。只有浮动价格是无效的。为什么这个数字变了?好的,我不确定这是否正是你想要的,但我在下面发布了我修改过的查询。首先,我去掉了隐式连接,并使用显式的内部连接对其进行了更改。我还使用LEFT JOIN
s移动了子查询以获得更好的性能。我删除了DISTINCT
和groupby
,因为我真的不明白你为什么需要它们
SELECT
`g`.`id` ,
`g`.`steam_id` ,
`g`.`type` ,
`g`.`title` ,
`g`.`price` ,
`g`.`metascore` ,
`g`.`image`,
`gp`.`id` AS `promotion_id`,
`gp`.`price` AS `promotion_price`,
`bg`.`copies`
FROM
`games` AS `g`
INNER JOIN `game_genres` AS `gg`
ON `gg`.`game_id` = `g`.`id`
LEFT JOIN `game_promotions` as `gp`
ON `g`.`id` = `gp`.`game_id`
LEFT JOIN ( SELECT `game_id`, COUNT(`id`) `copies`
FROM `bot_games`
WHERE `buyer` IS NULL
GROUP BY `game_id`) `bg`
ON `bg`.`game_id` = `g`.`id`
WHERE `g`.`title` LIKE "Counter%"
LIMIT 0 , 30
你是说结果是24.98997711182吗?这在单精度浮动误差范围内
得到预期结果时,只需将其四舍五入到两位小数即可显示。可能是因为14.99不能用浮点精确表示。不是很多数字都可以。e、 g.“我们是博格的浮点,准备近似”。价格栏是如何定义的?INT或FLOAT还是什么?Price列定义为FLOAT您的意思是结果是24.98997711182吗?这在单精度浮动误差范围内