Mysql ORDER BY RAND()LIMIT 1问题

时间:2011-05-21 05:17:15

标签: mysql sql greatest-n-per-group

问题是以下查询。

   SELECT RSV.Value
     FROM tblsubmitedservice SS
LEFT JOIN (SELECT ServiceID, Value 
             FROM tblservicevalue  
         ORDER BY RAND() 
            LIMIT 1) RSV ON RSV.ServiceID = SS.ServiceID

此查询必须使用上面的tblsubmitedservice从JOIN中的tblservicevalue中检索1个随机值。但有时(我不知道为什么有时)查询会返回null。如果我将“LIMIT 1”移动到查询结尾(不再在子查询内),则查询运行正确。

此查询已简化为理解,并且在原始查询中无法使用此解决方案。

2 个答案:

答案 0 :(得分:0)

可能是tblservicevalue中的所有ServiceID都没有在tblsubmittedservice中有相应的ServiceID,即表之间没有严格的一对一关系。

您可以使用以下方法检查表格:

1>检查tblservicevalue的行数和tblsubmittedservice是否相等。 2>接下来检查是否

SELECT
    RSV.Value
FROM tblsubmitedservice SS
    LEFT JOIN (SELECT ServiceID, Value FROM tblservicevalue) RSV ON RSV.ServiceID=SS.ServiceID

有相同的没有。行作为tblservicevalue,tblsubmittedservice。

如果1,2中的任何一个失败,显然行为是由于我上面解释的原因。

答案 1 :(得分:0)

检查以下查询是否返回任何行:

 SELECT RSV.Value
 FROM tblsubmitedservice SS
 LEFT JOIN tblservicevalue RSV ON RSV.ServiceID = SS.ServiceID
 WHERE RSV.ServiceID IS NULL

如果它确实返回任何行,则意味着来自tblsubmitedservice的某些行在tblservicevalue中没有对应的行(关于ServiceID字段)。在LEFT JOIN的情况下,如果找不到右侧的行(即RSV表中没有这样的RSV.ServiceID),则使用NULL。

与先前的评论相反,行数不必相等。