问题是以下查询。
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”移动到查询结尾(不再在子查询内),则查询运行正确。
此查询已简化为理解,并且在原始查询中无法使用此解决方案。
答案 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。
与先前的评论相反,行数不必相等。