我正在使用 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 Edition中不可用。

这可能意味着将涉及一些“动态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

10-01 05:10