将mssql查询转换为mysql查询

将mssql查询转换为mysql查询,mysql,sql-server,Mysql,Sql Server,我在网上找到了下面的mssql查询,它应该可以帮助我处理一个复杂的mysql查询,我已经为此苦苦挣扎了几天了 SELECT inv.typeID AS typeID, inv.typeName AS typeName, invGroups.groupName AS groupName, inv.published AS published, inv.description AS description, rankVal.valueFloat AS

我在网上找到了下面的mssql查询,它应该可以帮助我处理一个复杂的mysql查询,我已经为此苦苦挣扎了几天了

SELECT
    inv.typeID AS typeID,
    inv.typeName AS typeName,
    invGroups.groupName AS groupName,
    inv.published AS published,
    inv.description AS description,
    rankVal.valueFloat AS rank,
    replace (( SELECT skills.attributeName AS [data()]
      FROM dgmTypeAttributes tattr  -- Link between skillbook and attributes
      INNER JOIN dgmAttributeTypes skills ON (skills.attributeID = tattr.valueInt)
      WHERE (tattr.typeID = inv.typeID)
        AND (tattr.attributeID IN (180, 181)) -- Primary and secondary attributes
      ORDER BY inv.typeID FOR xml path('')), ' ', ',') AS prisec,
    replace (( SELECT RTRIM(CAST(inv2.typeID AS varchar)) + ',' AS [data()]
      FROM (SELECT * FROM dgmTypeAttributes WHERE (attributeID in (182, 183, 184)) -- Pre-req skills 1, 2, and 3
        AND (typeID = inv.typeID)) tattr2 
      INNER JOIN invTypes inv2 ON (tattr2.valueInt = inv2.typeID)
      ORDER BY inv.typeID FOR xml path('')), ' ', ' ') AS prereq,
    replace (( SELECT RTRIM(CAST(tattr2.valueInt AS varchar)) + ',' AS [data()]
      FROM (SELECT * FROM dgmTypeAttributes WHERE (attributeID in (277, 278, 279)) AND (typeID = inv.typeID)) tattr2  -- Link between skillbook and attributes
      ORDER BY inv.typeID FOR xml path('')), ' ', ' ') AS prereqlvl
FROM invTypes inv
INNER JOIN invGroups ON (inv.groupID = invGroups.groupID)
INNER JOIN dgmTypeAttributes rankVal ON (inv.typeID = rankVal.typeID)
WHERE invGroups.categoryID = 16 -- Skillbooks category    
    AND rankVal.attributeID = 275 -- Skill rank attribute
    AND inv.published = 1
GROUP BY inv.typeID, inv.typeName, invGroups.groupName, inv.published, inv.description, rankVal.valueFloat
ORDER BY invGroups.groupName, inv.typeName

我对mysql很满意,但我对mssql一无所知。有人能推荐一种转换这个查询的好方法吗?这种方法成本很低,或者现在成本很高?我不希望有人为我转换它,因为这会要求太多,但一些建议,除了学习mssql lolz之外,还可以为我指明仪式的方向,这将是非常好的。感谢您的时间和耐心。

建议:使用utf8 unicode字符集,以分隔文件csv的形式从MySQL数据库中提取数据。使用bcp将utf8与-Jutf8参数和字符模式-c一起指定导入SQL Server。请参阅站点。还有一个很好的例子。

那些带有for-XML路径的子查询似乎用于连接字符串。看看是否可以在MySQL中用GROUP_CONCAT替换它们。其他部分似乎是标准的SQL。

我想你已经把它倒过来了。我有一个mysql数据库中的数据,它最初存储在mssql数据库中,但对于实际使用数据的大量用户,我们将其导出到mysql。然而,有足够多的用户,您经常会发现查询对mssql中的数据处理很有帮助,而对于使用mysql的人来说,它们是毫无用处的。谢谢你。需要补充的东西。我无法访问mssql。我没有访问mssql数据转储的权限,即使我有访问mssql服务器的权限。它似乎也不喜欢[data]。这与创建别名相同吗?@Wes:方括号用于分隔SQL Server中的名称或别名的标识符,类似于MySQL中使用记号的方式。