Mysql加入两个表

时间:2012-01-28 02:02:51

标签: mysql join

我需要加入以下两个表

table_A
id    userId    name        score   game
1      2343     me          45       Palo Alto
2      6575     other       21       SF
3      6575     other           2        miami

table_B
id  userId      pen     mango
1    2343       3       4
2   2343        5       7
3   6575        1       2

这是加入:

SELECT COUNT(a.userId), SUM(b.pen), SUM(b.mango) 
  FROM table_A AS a 
  LEFT JOIN table_B b ON a.userId = b.userId 
    WHERE userId = 2343;

问题是我得到的数量(userId)等于2,但我需要它是1.我做错了什么?

3 个答案:

答案 0 :(得分:2)

将其更改为以下内容:

count(distinct a.userId)

答案 1 :(得分:0)

您的查询将生成两行,每行对应于table_B中的一行(一行用于id 1,一行用于id 2)。

我不确定为什么您认为结果count(a.userId)应该为1,但您可以使用GROUP BY GROUP BY b.userId {{1}}来强制执行此操作。

答案 2 :(得分:0)

我对你在做什么很困惑。您仍然可以获取{em> Pen 和 Mango SUM而无需加入这两个表格。另外,为什么你仍然使用COUNT函数,事实上,你知道你正在查询只有一个 ID?正确?

SELECT SUM(Pen) as TotalPen,
       SUM(Mango) as TotalMango
FROM table_B 
WHERE userId = 2343

但是如果你想要一个连接表,你可以这样写:

SELECT SUM(COALESCE(b.pen,0)) as TotalPen, 
       SUM(COALESCE(b.mango,0)) as TotalMango
FROM table_A AS a LEFT JOIN table_B b ON a.userId = b.userId 
WHERE a.userId = 2343;

问题是我得到的数量(userId)等于2,但我需要它为1。 - 查询是正确的,但你的理解是错误的。显然two record IDs of 2343

中有Table_B