![](/img/trans.png)
[英]Mysql: Using GROUP_CONCAT & FIND_IN_SET in where without having or subquery
[英]mysql query needs to be converted in sql server having find_in_set and group_concat keywords
我有两个表订单和公司。 公司表包含唯一的公司ID和公司名称。
订单表有两列,一列是orderid,另一列是companyID。 CompanyIds可以是多个逗号分隔的值。
我正在使用以下查询来获取与订单表的每个公司ID相对应的公司名称。
SELECT
(SELECT GROUP_CONCAT(cmp.cmpny_name)
FROM company cmp
WHERE FIND_IN_SET(cmp.CompanyID, odr.companyIDs)
) AS company
FROM orders odr
它在Mysql中工作得很好,但在sql server中却不能,因为这些关键字在sql server中不受支持,而且我在sql server上还没有做过很多工作,因此请帮助我找到正确的方法来完成此操作。
谢谢
在搜索中,我有一些关键字,例如用于组连的东西,但不能正确使用。 找不到SQL Server的find_in_set的等效项。
SELECT
(SELECT GROUP_CONCAT(cmp.cmpny_name)
FROM company cmp
WHERE FIND_IN_SET(cmp.CompanyID, odr.companyIDs)
) AS company
FROM orders odr
在SQL Server中不起作用
可以用STRING_AGG()代替GroupConcat,也可以用CONCAT(',',yourVariable,',')LIKE CONCAT('%,',youOtherVariable,',%')代替Find_In_Set
所以我认为这可能对您有帮助
SELECT
(SELECT STRING_AGG(cmp.cmpny_name,',')
FROM company cmp
WHERE CONCAT(',',cmp.CompanyID,',') LIKE CONCAT('%,',odr.companyIDs,',%')
) AS company
FROM orders odr
参考:
https://database.guide/the-sql-server-equivalent-to-group_concat/
如果应使用其他方式编写其较低的拆分功能,则此方法应与SQL Server 2016一起使用
SELECT
STUFF( (
SELECT ',' + cmp.cmpny_name
FROM company cmp
WHERE cmp.CompanyID IN (SELECT value FROM STRING_SPLIT (odr.companyIDs,','))
FOR XML PATH('')), 1, 1, NULL) AS company
FROM orders odr
如果SQL Server 2017
SELECT
(SELECT STRING_AGG(cmp.cmpny_name)
FROM company cmp
WHERE cmp.CompanyID in (SELECT value FROM string_split (odr.companyIDs,','))
) AS company
FROM orders odr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.