Mysql ORDER BY RAND() LIMIT 1 问题

发布于 2024-11-09 04:35:09 字数 434 浏览 0 评论 0原文

问题是以下查询。

   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”移至查询末尾(子查询内不再有),查询将正确运行。

该查询被简化为易于理解,并且在原始查询中该解决方案是不可能的。

The problem is the bellow query.

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

This query must retrieve 1 random value from tblservicevalue in JOIN with tblsubmitedservice like above. But sometimes (I do not know why sometimes) the query return null. If I move the "LIMIT 1" to the end of query (no more inside the subquery), the query run correctly.

This query is simplified to understand and in the original query this solution is not possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

此岸叶落 2024-11-16 04:35:09

可能 tblservicevalue 中的所有 ServiceID 在 tblsubscribedservice 中没有对应的 ServiceID,即,表之间不存在严格的一对一关系。

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

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

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

有相同的编号。行数为 tblservicevalue、tblsubscribedservice。

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

May be all the ServiceID's in tblservicevalue don't have corresponding ServiceIDs in tblsubmittedservice i.e., there is not a strict one-to-one relation between the tables.

You can check the tables using this:

1>Check the number of rows of tblservicevalue and tblsubmittedservice are equal.
2>Next check if

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

has the same no. of rows as tblservicevalue,tblsubmittedservice.

If either of 1,2 fail, clearly the behaviour is due to the reason I explained above.

作死小能手 2024-11-16 04:35:09

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

 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。

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

Check if below query returns any rows:

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

If it does return any rows it means that some rows from tblsubmitedservice have no correspoding rows in tblservicevalue (with regard to ServiceID field). In case of LEFT JOIN if rows on the right side can't be found (ie. there's no such RSV.ServiceID in RSV table) NULLs are used instead.

Contrary to previous comment number of rows does not have to be equal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文