我有疑问:
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
问题是错误的返回promotion_price
。在game_promotions
表格中,price
为“24.99”,但在查询结果中promotion_price
为“14.9899997711182”。返回的促销ID很好。只有浮动价格无效。为什么这个号码已经改变了?
答案 0 :(得分:0)
好的,我不确定这是不是你想要的,但我在下面发布我修改过的查询。首先,我摆脱了隐式连接,并使用显式INNER JOIN
进行了更改。为了更好的表现,我还用LEFT JOIN
s移动了你的subquerys。我删除了DISTINCT
和GROUP BY
,因为我无法理解为什么需要它们。
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
答案 1 :(得分:0)
你的意思是结果是24.9899997711182吗?这是在单精度浮动误差范围内。
您得到了预期的结果,您只需要将其四舍五入以显示。