1

我有 2 个表:'sending_fresh' 和 'agents'

我想得到“cc”等于“sending_fresh”的某个日期和“agents”的特定团队的总数。

我目前有:

SELECT SUM(sending_fresh.cc), agents.team  
FROM sending_fresh, agents 
WHERE agents.team = 'team1' 
AND sending_fresh.date = '2012-05-12'

仅从“sending_fresh”表中选择时,总和工作正常,但在从第二个表中添加 WHERE 语句时,答案会更高且错误。

任何人都可以帮忙吗?

4

1 回答 1

2

主要答案

外键 in对应于表中sending_freshagent_ididagents

您缺少 JOIN 条件并且缺少 GROUP BY 子句:

SELECT SUM(s.cc), a.team  
  FROM sending_fresh AS s
  JOIN agents        AS a ON a.id = s.agent_id
 WHERE a.team = 'team1' 
   AND s.date = '2012-05-12'
 GROUP BY a.team;

在我们获得有关加入的信息之前,我写道:

SELECT SUM(s.cc), a.team  
  FROM sending_fresh AS s
  JOIN agents        AS a ON a.team = s.team    -- Guess at join columns!
 WHERE a.team = 'team1' 
   AND s.date = '2012-05-12'
 GROUP BY a.team;

由于您错过了加入条件,我不得不猜测它是什么。相反,它可能是a.team_id = s.team_id或类似的东西。

如果加入是 on sending_fresh.team,如果你愿意,你可以完全避免加入。

SELECT SUM(cc), team  
  FROM sending_fresh
 WHERE team = 'team1' 
   AND date = '2012-05-12'
 GROUP BY team;

现在更详细地了解模式,这种简化是无效的。


普通的留言

请注意,使用显式 JOIN 意味着您不应该忘记连接条件。您不应在 FROM 子句中使用逗号列表表示法。您需要了解它才能识别古老的 SQL。你不应该在新的 SQL 中使用它,你应该升级旧的 SQL 以使用显式连接。

请注意,如果查询中有 N 个表,则应该有 N-1 个连接条件。

于 2012-07-13T20:17:23.480 回答