Как я могу присоединиться к двум таблицам, но включить каждую строку из правой таблицы только один раз? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть база данных с несколькими таблицами, к которой я хочу присоединиться, но, хотя совпадений будет несколько, нужно, чтобы строки таблицы бюджетов отображались только рядом с первой строкой, с которой они совпадают, чтобы можно было суммировать бюджетыпосле группировки без дублирования одного и того же бюджета.

SELECT GROUP_CONCAT(DISTINCT categories.categoryId), 
GROUP_CONCAT(budgets.budget) FROM transactions
    JOIN categories ON transactions.categoryId = categories.categoryId
    JOIN budgets ON transactions.categoryId = budgets.categoryId
    WHERE transactions.userId = 1 AND transactions.date BETWEEN DATE_ADD(CURDATE(), INTERVAL -30 DAY) AND CURDATE()
GROUP BY categories.displayName

По сути, я хочу, чтобы столбец GROUP_CONCAT (budgetts.budget) возвращал 204, 209, 206;а не 204, 204, 209, 206

Я использую это в качестве обходного пути, используя 2 запроса, если это поможет:

SELECT SUM(transactions.amount) AS spend, categories.displayName, 
GROUP_CONCAT(DISTINCT categories.categoryId) AS id FROM transactions
JOIN categories ON transactions.categoryId = categories.categoryId
WHERE transactions.userId = ${req.params.id} AND transactions.date BETWEEN DATE_ADD(CURDATE(), INTERVAL -30 DAY) AND CURDATE()
GROUP BY categories.displayName

SELECT SUM(budgets.budget) AS budget, categories.displayName, GROUP_CONCAT(DISTINCT categories.categoryId) FROM budgets 
JOIN categories ON categories.categoryId = budgets.categoryId
WHERE budgets.userId = ${req.params.id}
GROUP BY categories.displayName


res1.forEach((group, key) => {
  res2.forEach((result) => {
    if (result.displayName === group.displayName) {
      res1[key].budget = result.budget;
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...