首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将返回多个记录的查询更改为返回包含原始记录连接的单个记录?

如何将返回多个记录的查询更改为返回包含原始记录连接的单个记录?
EN

Stack Overflow用户
提问于 2017-10-23 10:06:51
回答 3查看 19关注 0票数 0

我对数据库不那么感兴趣,我面临以下问题。我使用的是MySql

我有一个疑问:

代码语言:javascript
复制
SELECT 
        LSSN.livestock_species_name AS species_name,
        LSFT.feed_type_name         AS feed_type_name,
        LSFT.description            AS feed_description
FROM LivestockDetails AS LSD
INNER JOIN LivestockSpecies AS LSS
      ON LSD.live_stock_species_id = LSS.id
INNER JOIN LivestockSpeciesName AS LSSN
      ON LSS.id = LSSN.livestock_species_id 
INNER JOIN Languages AS LNG
      ON LSSN.language_id = LNG.id   
INNER JOIN LsFeedDetails AS LSFD
      ON LSD.ls_feed_details_id = LSFD.id
INNER JOIN LsFeedTypes AS LSFT
      ON LSFD.ls_feed_types_id = LSFT.id
WHERE LSD.live_stock_species_id = 3
AND LSD.ls_area_id = 2
AND LSD.ls_action_type_id = 1
AND LSD.ls_message_id is null
AND LNG.id = 1

返回以下记录:

代码语言:javascript
复制
species_name            feed_type_name                         feed_description
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Local Cows              Rangeland                              Grasses         
Local Cows              Crop residues                          Maize and sorghum Stover, rice, wheat, and sugar bean straw, parts of banana plants, wheat straw
Local Cows              Improved grasses                       e.g. Napier grass
Local Cows              Browsing and herbaceous legumes        Browsing (largely during dry season) and herbaceous legumes (year round)
Local Cows              Planted pastures                       Napier, etc...  
Local Cows              Assorted weeds                         Assorted weeds  

好的,这些检索到的数据很好,但是我必须修改这个查询,以便:

1)它返回一个记录,其中包含上一个查询检索到的记录中包含的所有信息的级联。

2)连接必须是这样的:

代码语言:javascript
复制
feed_type_name RECORD-1 + (feed_description RECORD-1) + ";" +feed_type_name RECORD-2 + (feed_description RECORD-2) + ";" + feed_type_name RECORD-3 + ";" + (feed_description RECORD-3) + ..............................

因此,以前面检索的数据为例,如下所示:

代码语言:javascript
复制
Rangeland (Grasses) ; Crop residues (Maize and sorghum Stover, rice, wheat, and sugar bean straw, parts of banana plants, wheat straw) ; Improved grasses  (e.g. Napier grass) ; ............................................

我真的不知道如何修改我的原始查询来创建这样的查询。你能帮我做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-23 10:15:58

利用GROUP_CONCATGROUP BY按物种分类使用aggreagate

代码语言:javascript
复制
SELECT 
    LSSN.livestock_species_name AS species_name,
    GROUP_CONCAT(CONCAT(LSFT.feed_type_name, ' (', LSFT.description, ')') SEPARATOR ';') AS text
FROM LivestockDetails AS LSD
INNER JOIN LivestockSpecies AS LSS
    ON LSD.live_stock_species_id = LSS.id
INNER JOIN LivestockSpeciesName AS LSSN
    ON LSS.id = LSSN.livestock_species_id 
INNER JOIN Languages AS LNG
    ON LSSN.language_id = LNG.id   
INNER JOIN LsFeedDetails AS LSFD
    ON LSD.ls_feed_details_id = LSFD.id
INNER JOIN LsFeedTypes AS LSFT
    ON LSFD.ls_feed_types_id = LSFT.id
WHERE
    LSD.live_stock_species_id = 3
    AND LSD.ls_area_id = 2
    AND LSD.ls_action_type_id = 1
    AND LSD.ls_message_id is null
    AND LNG.id = 1
GROUP BY
    LSSN.livestock_species_name;
票数 1
EN

Stack Overflow用户

发布于 2017-10-23 10:14:54

按"species_name“分组,并使用GROUP_CONCAT(feed_type_name分隔符,‘)函数。

group-concat

票数 1
EN

Stack Overflow用户

发布于 2017-10-23 10:31:57

它可以按以下方式进行

代码语言:javascript
复制
SELECT  feed_type_name +'('+feed_description +') ; ' as [text()] from 
.....
.....
.....

FOR XML PATH('')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46886734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档