mysql查询显示9个结果

时间:2012-05-29 19:44:26

标签: php mysql mysql5

我有一个问题。

我正在运行以下查询。我的数据库中只有一条记录,但我得到了9条结果。

SELECT c.id, c.rk 
FROM cv AS c, employee AS e , cvCat AS cv_cat 
WHERE c.status=1 
    AND c.empIDFK = e.id 
    AND cv_cat.categoryFK IN ( 17,18,19,38,39,40,41,44,45,46 ) 
    AND cv_cat.cvFK = c.id

有人可以告诉我这个查询是否有任何问题。为什么我得到9个结果而不是1个结果。

此查询应仅显示一条记录,但显示9条结果。

3 个答案:

答案 0 :(得分:2)

当你这样做时

FROM cv AS c, employee AS e , cvCat AS cv_cat

您正在对三个表进行隐式连接。如果您想获得不同的记录,可以在选择后添加DISTINCT

SELECT DISTINCT c.id, c.rk 
FROM cv AS c, employee AS e , cvCat AS cv_cat 
WHERE c.status=1 
    AND c.empIDFK = e.id 
    AND cv_cat.categoryFK IN ( 17,18,19,38,39,40,41,44,45,46 ) 
    AND cv_cat.cvFK = c.id

答案 1 :(得分:2)

使用显式连接:

SELECT c.id, c.rk
FROM cv c
INNER JOIN employee e ON e.id = c.empIDFK
INNER JOIN cvCat cv_cat ON cv_cat.cvFK = c.id
WHERE c.status = 1
AND cv_cat.categoryFK IN (17,18,19,38,39,40,41,44,45,46)

答案 2 :(得分:1)

我认为9结果行“问题”是基于您的JOIN语法,因为这种隐式连接将返回所有行(每个表)作为连接结果,因为您只是提取c.id和c .rk可能看起来像MySQL发回了相同的结果9次。

附注:使用显式连接(例如...

)不推荐使用隐式连接
    SELECT c.id, c.rk
    FROM cv c
    LEFT JOIN employee e ON c.empIDFK = e.id
    LEFT JOIN cvCat cv_cat ON c.id = cv_cat.cvFK
    WHERE...

稍微帮助你的代码“面向未来”并为整个查询添加一些自我描述的语法。