Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql连接两个表_Mysql_Join - Fatal编程技术网

Mysql连接两个表

Mysql连接两个表,mysql,join,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

我需要连接以下两个表

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;

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

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


我不知道为什么您认为结果的
计数(a.userId)
应该是1,但是您可以通过使用
GROUP by
子句a la
GROUP by b.userId
将其更改为以下内容:

count(distinct a.userId)

我对你在做什么感到困惑。您仍然可以获得笔和芒果的
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。-这个问题是正确的,但你的理解是错误的。显然,在
表B

中有两个记录ID 2343,为什么它必须是1?聚合前的联接结果中有2行,因此计数为2。发布后,我立即得到了答案。但是我不被允许回复我的帖子。谢谢