我正在使用 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