Mysql ABS函数代码中未解释的错误

Mysql ABS函数代码中未解释的错误,mysql,Mysql,考虑以下查询: SELECT p . * FROM multiple_picks p WHERE p.event_id = '3303' AND p.pick = 'Highlanders' AND ABS( p.score - '8' ) = ( SELECT MIN( ABS( p2.score -1 ) ) FROM multiple_picks p2 WHERE p2.pick = p.pick AND p2.event_id = p.event_id ) 上述查询应返回选

考虑以下查询:

SELECT p . * 
FROM multiple_picks p
WHERE p.event_id =  '3303'
AND p.pick =  'Highlanders'
AND ABS( p.score -  '8' ) = ( 
SELECT MIN( ABS( p2.score -1 ) ) 
FROM multiple_picks p2
WHERE p2.pick = p.pick
AND p2.event_id = p.event_id )
上述查询应返回选择了正确团队的成员和最接近选择分数的成员。如果是平局-应返回多个成员

当我对下表运行上述查询时,命名为multiple_picks:

我得到了以下结果:

我的问题

返回的结果不正确,您可以清楚地看到

因为获胜的队伍是得分为8的高地人队(如查询中所示)

应该返回的正确结果是第2行(选择高地人10分的成员!)

任何关于我为什么会得到这个不正确的结果,或者我做错了什么的建议都将不胜感激!这件事已经拖了好几天了


这里的问题是p.score-(const)与p2.score-1进行比较,这是不一致的

这是我的想法(如果我理解正确的话)

假设您有变量(或类似的变量):

T=‘高地人’

S=8

这意味着您需要找到具有
p.pick=T
且p.score最接近S的条目

下面是您要做的(将硬编码值替换为上述变量,以避免偏离问题的本质):


你的逻辑似乎有缺陷。如果您需要最接近选择8的人,那么您需要
p的成员。分数-8
最接近0,而不是最接近最小值-1的人。@apokryfos谢谢您,这是我需要检查的区域,你可能对p.score-8应该改成什么有什么建议吗?
p.score-8
很好,内部的min应该是
min(ABS(p2.score-8))
这样比较like和like。@apokryfos你介意看看postBIngo下面的mysql fiddle链接吗!显然,硬编码的值将被php变量替换……但是运行代码我得到了正确的结果。非常感谢你!!
SELECT p . * 
FROM multiple_picks p
WHERE p.event_id =  '3303'
AND p.pick =  T
AND ABS(p.score - S) = ( 
    SELECT MIN(ABS(p2.score - S)) 
    FROM multiple_picks p2
    WHERE p2.pick = p.pick
    AND p2.event_id = p.event_id 
)