"查询连接时"的SQL查询

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结果列中的尾随逗号不是问题.我想要的只是一个非空白分隔符.

Kon*_*rak 5

您必须指定您正在使用的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)

  • 而且Oracle有`wmsys.wm_concat`,虽然它似乎没有文档记录.我自己从未使用它,但发现它很快.另一个使用`connect by`的Oracle解决方案:http://halisway.blogspot.com/2006/08/oracle-groupconcat-updated-again.html (2认同)