2014-03-26 43 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