Как объединить 2 таблицы в третью, которая содержит первичный ключ? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть 4 таблицы: первая - это таблица клиента, в которой есть информация о клиенте, а client_id - первичный ключ с автоинкрементом.

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

Последняя таблица содержит информацию о терапевтах.

В основном я хочу извлечь общее количество единиц для каждого клиента из двух посещений. Таблицы.

Я попробовал левое соединение безрезультатно. Я также попробовал UNION ALL, но не смог получить его для суммирования единиц.

Вот как выглядят таблицы:

клиент:

+---------------------------------------+
| client_id |  f_name  | l_name | th_id |
|-----------|----------|--------|-------|
|     1     | sherlock | holmes |   1   |
|     2     | john     | watson |   4   |
|     3     | hercule  | poirot |   3   |
|     4     | jane     | marple |   2   |
+---------------------------------------+

терапевт:

+--------------------------+
| th_id | f_name  | l_name |
|-------|---------|--------|
|   1   |  james  |  kirk  |
|   2   |  mr     |  spock |
|   3   |  bones  |  mccoy |
|   4   |  nyota  |  uhura |
+--------------------------+

посещаемость:

+-------------------------------+
|   it_id   | client_id | units |
|-----------|-----------|-------|
|     1     |     1     |   4   |
|     2     |     1     |   4   |
|     3     |     1     |   0   |
|     4     |     1     |   2   |
|     5     |     4     |   0   |
|     6     |     4     |   4   |
|     7     |     4     |   0   |
|     8     |     4     |   2   |
+-------------------------------+

посещаемость psr:

+-------------------------------+
|   it_id   | client_id | units |
|-----------|-----------|-------|
|     1     |     1     |  16   |
|     2     |     1     |  16   |
|     3     |     1     |   0   |
|     4     |     1     |  12   |
|     5     |     4     |   0   |
|     6     |     4     |  14   |
|     7     |     4     |   8   |
|     8     |     4     |  10   |
+-------------------------------+

Результат должен выглядеть следующим образом:

+------------------------------------------------------------+
| client_id | total_units_it | total_units_psr |  therapist  |
|-----------|----------------|-----------------|-------------|
|     1     |       10       |       44        | james kirk  |
|     4     |        6       |       32        | mr spock    |
+------------------------------------------------------------+

Пожалуйста извините за примитивные представления, и, пожалуйста, не спрашивайте, почему таблицы разработаны таким образом ... ;-) Кроме того, я, очевидно, проигнорировал многие другие поля, которые не имеют отношения к вопросу, такие как даты и т. д. c.

Любой совет будет оценен.

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Вы не можете использовать соединение, или вы создадите декартово произведение и продублируете строки.

Вместо этого вы делаете подзапрос:

 SELECT c.*
      , (SELECT SUM(units) FROM attendance_it a WHERE a.client_id = c.client_id ) as total_units_it 
      , (SELECT SUM(units) FROM attendance psr a WHERE a.client_id = c.client_id ) as total_units_psr 
      , t.*

 FROM client c
 JOIN therapist t 
   ON c.th_id = t.th_id 
0 голосов
/ 01 февраля 2020

используйте group by client_id , чтобы получить сумму каждого клиента. и нет необходимости использовать соединение, так как у вас уже есть идентификаторы в столбце.

...