Mysql, соединяющий два стола - PullRequest
0 голосов
/ 28 января 2012

Мне нужно объединить следующие две таблицы

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. Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 28 января 2012

Измените его на следующее:

count(distinct a.userId)
0 голосов
/ 28 января 2012

Я запутался в том, что ты делаешь. Вы все еще можете получить SUM из Pen и Mango без объединения двух таблиц. И еще, почему вы все еще используете функцию COUNT, когда, фактически, вы знаете, что запрашиваете ONLY ONE 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;

Проблема в том, что я получаю значение count (userId), равное 2, но мне нужно, чтобы оно равнялось 1. - Запрос правильный, но ваше понимание неверное. Очевидно, есть two record IDs of 2343 в Table_B

0 голосов
/ 28 января 2012

Ваш запрос будет генерировать две строки, каждая строка соответствует одной строке в table_B (одна для идентификатора 1, одна для идентификатора 2).

Я не уверен, почему вы считаете, что итоговое значение count(a.userId) должно быть1, но вы можете применить это, используя предложение GROUP BY а-ля GROUP BY b.userId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...