2014-12-30 22 views
0

请原谅我,如果我没有正确解答这个问题。这是我想要做的:如何使用SQLite group_concat(X,Y)从JOIN创建单个列?

我有两个表连接在一个包含GUID的字符串列。 表1包含有关我的数据对象的一切,而表2包含一个字符串列,我需要链接到记录从表1。对于中的每个记录,表1,有1..n记录表2。我目前使用INNER JOIN的SQLite语句正在为中的每条记录返回n条记录,表1,这并不适合我的需要。我想在表1的每条记录中找回1条记录。

然而,诀窍是我仍然希望看到表2中的所有字符串值,字符串连接为“值1;值2;值3;等等”。

我使用GROUP_CONCAT(X,Y)功能如下尝试:

SELECT o.ObservationGuid, o.ObservationID, o.ObservationParentTypeGuid, 
    o.ObservationTypeGuid, o.Name, o.ObservationParentName, o.GrowthStageGuid, 
    o.MorphologyTypeGuid, o.LifespanGuid, o.OrganismTypeGuid, o.ScientificName, 
    o.AgXID, o.AgGatewayID, o.Genus, o.Family, o.TaxonomicalOrder, o.Class, 
    o.Division, o.Kingdom, o.FavorableConditions, o.DescriptionSymptoms, 
    group_concat(oa.Name, '; ') 
FROM Observation o 
INNER JOIN ObservationAlias oa ON oa.ObservationGuid = o.ObservationGuid 
WHERE ObservationTypeGuid = '{E3149781-2423-4F15-8599-CB320E871284}' 
GROUP BY o.ObservationGuid COLLATE NOCASE 

但是,这会导致没有返回的记录都没有。接下来,我试图通过子句除去GROUP:

SELECT o.ObservationGuid, o.ObservationID, o.ObservationParentTypeGuid, 
    o.ObservationTypeGuid, o.Name, o.ObservationParentName, o.GrowthStageGuid, 
    o.MorphologyTypeGuid, o.LifespanGuid, o.OrganismTypeGuid, o.ScientificName, 
    o.AgXID, o.AgGatewayID, o.Genus, o.Family, o.TaxonomicalOrder, o.Class, 
    o.Division, o.Kingdom, o.FavorableConditions, o.DescriptionSymptoms, 
    group_concat(oa.Name, '; ') 
FROM Observation o 
INNER JOIN ObservationAlias oa ON oa.ObservationGuid = o.ObservationGuid 
WHERE ObservationTypeGuid = '{E3149781-2423-4F15-8599-CB320E871284}' 
COLLATE NOCASE 

这将返回1分的记录,从表1加含有每个记录的字符串值的oa.Name字段由第一匹配记录的在表2以格式 “值1;值2;值3;等等

任何帮助将不胜感激!

+0

当你不使用contact_group时,它会给你什么? –

+0

你尝试过group_concat(不同的oa.Name SEPARATOR';')吗? –

+0

你为什么使用COLLATE NOCASE? –

回答

0

我想清楚我做错了什么,这是边缘尴尬。 COLLATE NOCASE必须先于GROUP BY子句:

SELECT o.ObservationGuid, o.ObservationID, o.ObservationParentTypeGuid, 
    o.ObservationTypeGuid, o.Name, o.ObservationParentName, o.GrowthStageGuid, 
    o.MorphologyTypeGuid, o.LifespanGuid, o.OrganismTypeGuid, o.ScientificName, 
    o.AgXID, o.AgGatewayID, o.Genus, o.Family, o.TaxonomicalOrder, o.Class, 
    o.Division, o.Kingdom, o.FavorableConditions, o.DescriptionSymptoms, 
    group_concat(oa.Name, '; ') 
FROM Observation o 
INNER JOIN ObservationAlias oa ON oa.ObservationGuid = o.ObservationGuid 
WHERE ObservationTypeGuid = '{E3149781-2423-4F15-8599-CB320E871284}' 
COLLATE NOCASE 
GROUP BY o.ObservationGuid 

就是这样,现在查询从表1只返回唯一记录,包括从名称表的每一个值2串连成在我的结果集中有一个值。