2014-03-26 42 views
1

我表一個特定類型的欄目有:GROUP_CONCAT在第一

Parent_Child (Parent_SSN, Child_SSN) 
Person (SSN, Name, age, sex) 
School (Child_SSN, School_Name) 

我想選擇誰擁有自己的孩子ATLEAST一個特定的學校'X'。我有父母(雌,雄)工作查詢和我的MySQL查詢:

select group_concat(p.name) from person p,parentchild pc,school s 
where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn 
group by pc.childssn 

這顯示結果爲parent(male,female),但我想在(female,male) form的結果,如果我這組由parent.sex它顯示在各行的,而不是單列結果我沒有想法。

樣品所需的輸出:

name 

Angela,Jim 

我上面的現有查詢的輸出:

name 

Jim,Angela 
+0

您能否顯示預期的輸出? – xdazz

回答

1

這是你的Sql Fiddle

SELECT DISTINCT group_concat(p.name ORDER BY p.sex Asc) 
FROM Person p JOIN Parent_Child pc ON p.ssn=pc.Parent_SSN 
      JOIN School s ON s.Child_SSN = pc.Child_SSN 
WHERE s.School_Name='X' 
GROUP By pc.Child_SSN; 
+0

非常感謝你。你的邏輯比我的更好。 – user1613360

0

試試這個,也許可以使用排序

SELECT GROUP_CONCAT(p.name ORDER BY p.name DESC) from person p,parentchild pc,school s 
where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn 
group by pc.childssn 
+0

不起作用,我也想要一個不依賴於數據的查詢我想要一個普遍的查詢,它將第一個類型爲女性的父類和第二個類型的男性類型放在一起。 – user1613360

0

您可以使用ORDER BY內這種GROUP_CONCAT功能:

試試這個

SELECT group_concat(DISTINCT p.name ORDER BY p.name Asc) 
FROM person p JOIN parentchild pc ON p.ssn=pc.parentssn 
       JOIN school s ON s.childssn = pc.childssn 
WHERE s.schoolname='X' 
GROUP By pc.childssn 

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function%5Fgroup-concat

+0

排序僅適用於具有一個值的結果集,並且不適用於具有多個值的結果集。 – user1613360

0

我總算得到使用加入這裏的結果是我工作的查詢。

select * from (select distinct p.name from person p,parentchild pc,school s where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn and p.sex='F')q1 join (select distinct p.name from person p,parentchild pc,school s where s.schoolname='X' and s.childssn=pc.childssn and p.ssn=pc.parentssn and p.sex='M')q 

我想還是知道是否有可能以按GROUP_CONCAT結果集由特定條件的項目,這將影響它在GROUP_CONCAT結果集現在的位置。

+0

當我嘗試這個查詢ID不符合你所說的是你想要的輸出。 – Nathan

+0

它適用於我。我剛加入與父母的父母。 – user1613360