我正在使用 Sybase ASE 数据库。
我有两个看起来像的表:
表Shops
:
---------------------
| ShopName | ShopID |
---------------------
| Sweetie | 1 |
| Candie | 2 |
| Sugarie | 3 |
---------------------
表
Sweets
:----------------------
| SweetName | ShopID |
----------------------
| lolly | 1 |
| redlolly | 1 |
| greenloly | 1 |
| taffy | 2 |
| redtaffy | 2 |
| bluetaffy | 2 |
| choco | 3 |
| mintchoco | 3 |
| milkchoco | 3 |
| gummybees | 3 |
----------------------
我想编写一个查询来生成如下所示的结果:
-----------------------------------------------------
| ShopName | Sweets |
-----------------------------------------------------
| Sweetie | lolly, redlolly, greenlolly |
| Candie | taffy, redtaffy, bluetaffy |
| Sugarie | choco, mintchoco, milkchoco, gummybees |
-----------------------------------------------------
我该怎么做呢?我需要这个用于 Sybase ASE 数据库。我试过
LIST()
功能,但我在这方面遇到错误。我查看了它的文档,结果发现 ASE 版本中没有此功能。这可能意味着将涉及一些“动态 sql”(我几乎不知道这意味着什么)。任何人都可以帮忙吗?
我可以想要
ShopId
而不是 ShopName
在结果表中......我还不确定。我想这不会有太大区别。此外,Sweets
中的尾随逗号结果列不是问题。我想要的只是一个非空白分隔符。
最佳答案
您必须指定您使用的 DBMS。
MySQL的GROUP CONCAT正是您所需要的。
SELECT ShopName, GROUP_CONCAT(SweetName SEPARATOR ", ")
FROM Shops a
JOIN Sweets b
ON a.ShopID = b.ShopID
GROUP BY ShopName
关于 "concatenate on join"的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737798/