У меня есть база данных с несколькими таблицами, к которой я хочу присоединиться, но, хотя совпадений будет несколько, нужно, чтобы строки таблицы бюджетов отображались только рядом с первой строкой, с которой они совпадают, чтобы можно было суммировать бюджетыпосле группировки без дублирования одного и того же бюджета.
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;
}
});
});