Как суммировать размеры строк в нескольких таблицах - PullRequest
0 голосов
/ 19 октября 2018

В MySQL у меня есть три таблицы:

A:
-----------------
|g_id  | txt    |
|------|--------|
|   1  |  cat   | 
|   3  |  dog   |

и

B:
--------------------------
|g_id  | txt     | txt2  |
|------|---------|--------
|   1  |  hat    |  chat  |
|   3  |  that   |  NULL |
|   3  |  that   |  NULL |

и

C:
------------------
|g_id  | txt     |
|------|---------|
|   1  |  hat    | 
|   1  |  mat    | 
|   3  |  that   |

Моя цель - суммировать столбец txt каждогостроки в таблицах A, B и C, сгруппированные по g_id ...

Итак, после моего запроса ожидаемый результат будет:

----------------
|g_id  | size  |
|------|-------|
|   1  |  16   | 
|   3  |  15   |

Мой запрос не выполнен:

SELECT 
   g_id,
   SUM(length(txt)) + SUM(length(txt2) as size
   FROM ((SELECT a.g_id, a.txt FROM a) UNION ALL
      (SELECT b.g_id, b.txt, b.txt2 FROM b) UNION ALL
      (SELECT c.g_id, c.txt FROM c) 
   ) abc
GROUP BY g_id;

Ошибка: используемые операторы SELECT имеют разное количество столбцов

1 Ответ

0 голосов
/ 19 октября 2018

Используйте union all вместо join:

SELECT g_id,
       SUM(length(txt)) as size
FROM ((SELECT a.g_id, a.txt FROM a) UNION ALL
      (SELECT b.g_id, b.txt FROM b) UNION ALL
      (SELECT c.g_id, c.txt FROM c) 
     ) abc
GROUP BY g_id;
...