如果我没有正确措辞这个问题,请原谅我。 这是我正在尝试做的:
我在包含 GUID 的字符串列上连接了两个表。表 1 包含与我的数据对象有关的所有内容,而表 2 包含一个字符串列,我需要将其链接到表 1 中的记录。对于表 1 中的每条记录,表 2 中有 1..n 条记录。 我当前使用 INNER JOIN 的 SQLite 语句为表 1 中的每条记录返回 n 条记录,这不符合我的需求。 我想为表 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 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
这将返回 1 条记录,由表 1 中的第一个匹配记录加上 oa 组成。名称字段包含表 2 中每条记录的字符串值,格式为"值 1;值 2;值 3;等等"
任何帮助将不胜感激!
我发现我做错了什么,这很尴尬。 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 中"名称"列中的每个值,这些值在我的结果集中连接成一个值。