Join

合併一個父表和多個子表

  • November 1, 2018

我正在努力尋找一種方法來組合多個表(通過視圖)以獲得所需的結果。

我找到了這個 Stack Overflow Q & A,這讓我開始了,但我無法得到我需要的結果。

有一個父表和多個子表,其中 achild_id對應於 a parent_id。但是,每個孩子都有一些匹配的欄位和一些獨特的欄位,我想將它們組合在一起。

家長

+-----------+----------+
| parent_id | name     |
+-----------+----------+
|         1 | Bob      |
|         2 | Peter    |
|         3 | Alice    |
+-----------+----------+

孩子 1

+----------+------------+-------+
| child_id | date       | color |
+----------+------------+-------+
|        1 | 2017-07-20 | red   |
|        3 | 2017-07-24 | blue  |
+----------+------------+-------+

孩子 2

+----------+------------+--------+
| child_id | date       | lenght |
+----------+------------+--------+
|        2 | 2017-07-21 | 185    |
+----------+------------+--------+

綜合預期結果

+-----------+-------+----------+------------+-------+--------+
| parent_id | name  | child_id | date       | color | lenght |
|         1 | Bob   |        1 | 2017-07-20 | red   | NULL   |
|         2 | Peter |        2 | 2017-07-21 | NULL  | 185    |
|         3 | Alice |        3 | 2017-07-24 | blue  | NULL   |
+-----------+-------+----------+------------+-------+--------+

你需要外連接。具體到LEFT JOIN每個孩子的父表:

 parent
LEFT JOIN child1 AS c1 ON p.parent_id = c1.child_id
LEFT JOIN child2 AS c2 ON p.parent_id = c2.child_id

然後SELECT從相應的表中。兩個子表中的列可以與COALESCE(). 僅當存在兩個子項中都出現 an 的情況時,函式內部表達式的順序才重要id

查詢將類似於:

SELECT 
   p.parent_id, p.name,
   COALESCE(c1.child_id, c2.child_id) AS child_id,
   COALESCE(c1.date, c2.date) AS date, 
   c1.color, 
   c2.lenght
FROM
   parent AS p
 LEFT JOIN child1 AS c1 ON p.parent_id = c1.child_id
 LEFT JOIN child2 AS c2 ON p.parent_id = c2.child_id ;

引用自:https://dba.stackexchange.com/questions/181848