0

我有个问题。

我正在运行以下查询。我的数据库中只有一条记录,但我得到了 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 个结果。

4

3 回答 3

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
于 2012-05-29T19:47:23.883 回答
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)
于 2012-05-29T19:49:06.710 回答
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...

将有助于“面向未来”您的代码,并为整个查询添加更多自描述语法。

于 2012-05-29T20:05:34.163 回答