簡體   English   中英

如何將 2 個表連接到包含主鍵的第三個表?

[英]How do I join 2 tables to a third one which contains the primary key?

我有 4 個表:第一個是客戶端表,其中包含客戶信息,並且 client_id 作為自動增量主鍵。

第二個和第三個在結構上是相同的:它們用於跟蹤兩個不同治療項目的出勤情況。 它們每個都有一個主鍵和一個用於跟蹤客戶端的 client_id 列。 其中一個字段包含我想求和的單位。

最后一個表格包含治療師的信息。

基本上我想從兩個出勤表中提取每個客戶的單位總數。

我試過 LEFT JOINS 無濟於事。 我還嘗試了 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   |
+-------------------------------+

出勤率:

+-------------------------------+
|   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    |
+------------------------------------------------------------+

請原諒原始表示,請不要問為什么表格設計成那樣...... ;-) 另外,我顯然忽略了許多與問題無關的其他字段,例如日期等。

任何意見,將不勝感激。

謝謝!

您不能使用 join ,否則您將創建笛卡爾積並復制行。

相反,您執行子查詢:

 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 

使用group by client_id來獲取每個客戶端的總和。 並且無需使用 join,因為您已經在列中擁有 id。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM