返回重复结果SQL?

时间:2014-06-12 21:12:24

标签: php mysql sql

我有以下查询:

SELECT DISTINCT
SQL_CALC_FOUND_ROWS 
    unr.RequestID, 
    unr.UnRead, 
    unr.FilterID, 
    r.GroupID, 
    r.Year, 
    rv.Bounty 
FROM (users_notify_requests as unr, requests_votes as rv) 
    JOIN requests AS r ON r.ID = unr.RequestID
WHERE unr.UserID = 1 ORDER BY unr.RequestID DESC LIMIT 50

这应该只返回2行,因为只有两个请求unr.UserID = 1,但它返回10个版本的第一个版本,5个版本的第二个版本完全相同(分别)。知道为什么会这样吗?

编辑:MySQL版本5.5.29,根据要求。

编辑2:print_r()转储:http://pastebin.com/BXujnEpx。结果对于给定的ID具有不正确的赏金,因此查询的内容非常明显。

2 个答案:

答案 0 :(得分:2)

您没有使用任何条件加入rv,因此该表中的每一行都将被返回:这可能是您额外行的原因。

您可能需要以下一行(猜测列名称,因为我没有您的架构):

INNER JOIN request_votes rv ON rv.requestId = r.id

答案 1 :(得分:0)

您正在加入两张基于笛卡尔积或交叉连接的表格。

FROM (users_notify_requests as unr, requests_votes as rv)

然后你正在使用内连接。

JOIN requests AS r ON r.ID = unr.RequestID

要解决此问题,您应该在两种情况下使用内部联接。

笛卡尔连接是指将一个表的每一行连接到另一个表的每一行。如果第一个表包含第二个中的x行和y行,则结果集将为x * y rows。

SELECT DISTINCT
SQL_CALC_FOUND_ROWS 
    unr.RequestID, 
    unr.UnRead, 
    unr.FilterID, 
    r.GroupID, 
    r.Year, 
    rv.Bounty 
FROM users_notify_requests as unr
    JOIN requests_votes as rv ON rv.RequestID = unr.RequestID
    JOIN requests AS r ON r.ID = unr.RequestID
WHERE unr.UserID = 1 ORDER BY unr.RequestID DESC LIMIT 50