2016-06-24 89 views
0
加盟父母單個記錄

我試圖連接兩個表(家長和孩子),但我只想要一個孩子返回的每個父...返回與多個孩子

select parent.name,child.name from parent left join child on parent.id=child.parentid 

針對上述情況,各孩子被退回,父母被複制。我不打擾哪個孩子回來。

感謝所有幫助

克里斯

回答

2

只有一個樣品@Mahesh Madushanka。我將在稍後刪除它,但我不能在評論格式化

這裏我2個表

MariaDB [yourSchema]> select id from table1; 
+--------+ 
| id  | 
+--------+ 
| 000001 | 
| 000002 | 
| 000003 | 
| 000004 | 
| 000005 | 
| 000005 | 
+--------+ 
6 rows in set (0.00 sec) 

MariaDB [yourSchema]> select id from table2; 
+--------+ 
| id  | 
+--------+ 
| 000001 | 
| 000001 | 
| 000002 | 
| 000002 | 
| 000003 | 
| 000004 | 
+--------+ 
6 rows in set (0.00 sec) 

結果只與聯接

MariaDB [yourSchema]> SELECT t1.id,t2.id FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id; 
+--------+--------+ 
| id  | id  | 
+--------+--------+ 
| 000001 | 000001 | 
| 000001 | 000001 | 
| 000002 | 000002 | 
| 000002 | 000002 | 
| 000003 | 000003 | 
| 000004 | 000004 | 
| 000005 | NULL | 
| 000005 | NULL | 
+--------+--------+ 
8 rows in set (0.01 sec) 

結果與加入和分組 - t1.id = 1和2錯過1次

MariaDB [yourSchema]> SELECT t1.id,t2.id FROM table1 t1 
    -> LEFT JOIN table2 t2 ON t1.id = t2.id 
    -> GROUP BY t2.id; 
+--------+--------+ 
| id  | id  | 
+--------+--------+ 
| 000005 | NULL | 
| 000001 | 000001 | 
| 000002 | 000002 | 
| 000003 | 000003 | 
| 000004 | 000004 | 
+--------+--------+ 
5 rows in set (0.00 sec) 
+0

不會說謊,表名的選擇相當差。建議定義什麼被視爲加入的父/子和外鍵。 – pyepye

+0

太好了。謝謝你的時間。 Group By會做得很好。出於某種原因,我一直認爲Left Join只會向你展示左邊的相關權利,右邊的join會做相反的事情...... – Chris

0

選擇parent.name,從父child.name左邊parent.id加入孩子上parent.id = child.parentid組

+0

這僅適用於如果**父母。 ID **是唯一的。 –

+0

'parent.id' *應該是唯一的......否則,數據模型會非常糟糕。也就是說,@ mahesh的解決方案應該是'group by parent.id',因爲'parent.name'可能是* not * unique(正如@bernd所暗示的)。 – pyepye

+0

@bernd他說:「我只希望爲每個父母返回一個孩子」,如果父母的ID不是唯一的,這意味着我們可以在父表中有重複的父項。但仍然根據他的要求,他希望只有一個記錄的父母,所以這將工作 –