mysql计数问题

时间:2011-06-21 16:51:56

标签: mysql count

SELECT count( t1.id ) , t2.special_value
FROM table_1 AS t1, table_2 AS t2
WHERE t1.`group` = 'val'
AND t2.code = 'val'

返回

count - normal value
special_value - NULL

SELECT t2.special_value
FROM table_2 AS t2
WHERE t2.code = 'val'

返回

special_value - another normal value

为什么第一个查询工作错误?..

目前,我需要

(count( t1.id ) + t2.special_value)

1 个答案:

答案 0 :(得分:2)

这就是为什么你永远不应该使用SQL'89隐式连接语法。

您没有连接条件导致交叉连接。

使用显式连接语法重写查询:

SELECT count( t1.id ) , t2.special_value
FROM table_1 AS t1
INNER JOIN table_2 AS t2 ON (t1.`group` = t2.code)    <<-- join condition here
WHERE ....                                            <<-- filter condition here
GROUP BY ....                                         <<-- group by field here

我不知道表t1和t2是如何链接的,所以你必须稍微调整一下,但这就是它应该如何工作。
请永远不要再使用隐式where联接。

<强>说明
我想知道p.`group`pp.code是什么,但我猜你打算写t1.`group`t2.code

如果它们是保留字,你只需要在`反引号中转义字段和表名 就个人而言,所有这些反叛让我头晕目眩,但那只是我。