jrh*_*ath 6 sql join concatenation sybase-ase
我正在使用Sybase ASE数据库.
我有两个表看起来像:
表Shops:
---------------------
| ShopName | ShopID |
---------------------
| Sweetie | 1 |
| Candie | 2 |
| Sugarie | 3 |
---------------------
Run Code Online (Sandbox Code Playgroud)
表Sweets:
----------------------
| SweetName | ShopID |
----------------------
| lolly | 1 |
| redlolly | 1 |
| greenloly | 1 |
| taffy | 2 |
| redtaffy | 2 |
| bluetaffy | 2 |
| choco | 3 |
| mintchoco | 3 |
| milkchoco | 3 |
| gummybees | 3 |
----------------------
Run Code Online (Sandbox Code Playgroud)
我想编写一个查询,生成如下结果:
-----------------------------------------------------
| ShopName | Sweets |
-----------------------------------------------------
| Sweetie | lolly, redlolly, greenlolly |
| Candie | taffy, redtaffy, bluetaffy |
| Sugarie | choco, mintchoco, milkchoco, gummybees |
-----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我应该怎么做呢?我需要这个用于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
Run Code Online (Sandbox Code Playgroud)