2015-11-23 46 views
0

我的數據庫看起來是這樣的:通過使用不同的孩子的名字MySQL的取父母和所有的孩子

+-------+-------+--------+ 
| Name | Value | Parent | 
+-------+-------+--------+ 
| Bob | 10 |  1 | 
| Smith |  5 |  1 | 
| Jack |  3 |  1 | 
| Bob | 10 |  2 | 
| Smith |  5 |  2 | 
| Jack |  3 |  2 | 
| Black |  2 |  2 | 
+-------+-------+--------+ 

我怎麼能查詢父:

家長:

+----+-------+ 
| ID | Name | 
+----+-------+ 
| 1 | Stage | 
| 2 | Prod | 
+----+-------+ 

兒童作爲我的查詢的一部分?

如果我想獲取家長ID 1以及父母的所有子女,我怎樣才能在查詢中使用「Bob」,「Smith」和「Jack」來獲得父母ID 1,但不是父母ID 2。

編輯:我不認爲這是一個重複,因爲其他問題的解決方案將同時匹配父ID爲1和2,由於他們從1

+0

@Barmar我不認爲這是重複的,因爲另一個問題的解決方案將匹配父母ID 1和2,因爲他們與1 –

+0

有相同的孩子。請嘗試@GiorgosBetsos的答案。 –

+0

是的,我現在正在實施它 –

回答

1

除了具有相同的孩子可以使用GROUP_CONCAT

SELECT ID, Name 
FROM (
    SELECT p.ID, p.Name, GROUP_CONCAT(c.Name ORDER BY c.Name) AS children 
    FROM Parent AS p 
    INNER JOIN Children AS c ON p.ID = c.Parent 
    GROUP BY p.ID, p.Name) AS t 
WHERE t.children = 'Bob,Jack,Smith' 

這將返回任何父母完全這些('Bob,Jack,Smith')孩子。

+0

但是,如果你搜索傑克史密斯鮑勃。這個解決方案是icky – Strawberry

+0

我的查詢在'GROUP_CONCAT'中執行'ORDER BY'。因此,只要字符串文字按升序排列名稱,它就會工作。 –

+0

我正在談論WHERE子句的右側 – Strawberry