Join
合併一個父表和多個子表
我正在努力尋找一種方法來組合多個表(通過視圖)以獲得所需的結果。
我找到了這個 Stack Overflow Q & A,這讓我開始了,但我無法得到我需要的結果。
有一個父表和多個子表,其中 a
child_id
對應於 aparent_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 ;