我正在运行以下查询。我的数据库中只有一条记录,但我得到了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条结果。
答案 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...
稍微帮助你的代码“面向未来”并为整个查询添加一些自我描述的语法。