【发布时间】:2014-11-13 15:14:07
【问题描述】:
fiId 是 Table1 的主键。为什么此查询返回的行数与 table1 中的 fiId 一样多。 fiId 在 where 子句中被限制为 1 行。当按 Table1.fiId 添加一个组时,查询会正常执行,这肯定不需要吗?谢谢。
SELECT
Table1.fiId,
SUM(CASE Table2.type IN (4,7) THEN Table2.valueToSum ELSE 0 END),
FROM
Table1 INNER JOIN Table3 ON Table1.fiId = Table3.parentId
INNER JOIN Table2 ON Table2.leId = Table3.fiId
WHERE
Table1.fiId = 76813 AND
Table2.insId = 431144
【问题讨论】:
-
您可能会争辩说,
SELECT子句中的每个非聚合表达式可以用作“隐式”GROUP BY子句,但不幸的是,SQL 不是这样设计好了。 -
您可以在查询中省略 GROUP BY - 只需将 SELECT 中的“Table1.fiId”替换为 76813
-
显然这个查询只会返回 FiId = 76813 的行,但是内连接可能有多个记录与其他表中的 fiId 连接