gpt4 book ai didi

sql - 使用 JOIN 修改多列查询的结果

转载 作者:行者123 更新时间:2023-11-29 13:02:13 25 4
gpt4 key购买 nike

我使用 postgresql 9.1

我有两个链接表:表事件:

 eventid |    name    
---------+------------
1 | event1
2 | deuxieme
3 | troisieme3

和一个链接到事件的表格图像,如下所示:

 id |          path          | alt  | eventid | 
----+------------------------+------+---------+
1 | /something/to/img.jpg | alt | 1 |
2 | /something/to/img2.jpg | alt2 | 1 |
3 | /something/to/img3.jpg | alt3 | 2 |

我想返回包含链接路径和替代项的所有事件的列表。到目前为止,我使用了这个查询:

 SELECT events.eventId, events.name, string_agg(distinct images.path, ',') AS paths, string_agg(distinct images.alt, ',') AS alts
FROM events
LEFT JOIN images ON images.eventId = events.eventId
GROUP BY events.eventId;

但是有一个问题,它返回:

 eventid |    name    |                    paths                     |   alts   
---------+------------+----------------------------------------------+----------
1 | event1 | /something/to/img2.jpg,/something/to/img.jpg | alt,alt2
2 | deuxieme | /something/to/img3.jpg | alt3
3 | troisieme3 | |

如您所见,路径和替代品的顺序不同,目前无法知道哪些替代品和路径对应于同一图像。所以我的问题是:有没有办法在结果中对它们进行分组,或者如果不可能,我怎样才能以相同的顺序呈现它们?谢谢 ;)

最佳答案

我想最简单的修改 - 如果您不希望结果在单独的行上 - 只是用逗号分隔值,url,alt,url,alt,... 这将使 DISTINCT 总体上起作用一次 URL/ALT 对。

SELECT events.eventId, events.name, 
string_agg(distinct images.path || ',' || images.alt, ',') AS images
FROM events
LEFT JOIN images ON images.eventId = events.eventId
GROUP BY events.eventId, events.name;

An SQLfiddle to test with .

关于sql - 使用 JOIN 修改多列查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26267042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com