2014-12-30 19 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串連成在我的結果集中有一個值。