`
张微笑7
  • 浏览: 1732 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

用函数实现mysql和sqlserver的树查询

阅读更多

干活的时候 遇到要用sql语句做树查询(mysql和sqlserver) 这些思路都是我看其他兄弟姐妹的....能用但可能写得不怎么好  函数返回的都是以逗号分隔开的id字符串
mysql:
查询当前节点和他的祖先节点

CREATE DEFINER=`root`@`%` FUNCTION `org_getParents`(childId varchar(32)) RETURNS varchar(10000) BEGIN -- 获取机构父节点,包括本身 DECLARE sTemp VARCHAR(10000); DECLARE sTempParentId VARCHAR(10000); SET sTemp =childId; SET sTempParentId=childId; WHILE sTempParentId!='0' DO SELECT parent_id INTO sTempParentId FROM org where org_id=sTempParentId; IF sTempParentId is not null THEN SET sTemp = concat(sTemp,',',sTempParentId); END IF; END WHILE; RETURN sTemp; END

 


 查询当前节点和他的子孙节点

CREATE DEFINER=`root`@`%` FUNCTION `org_getChilds`(rootId varchar(32)) RETURNS varchar(10000) BEGIN -- 获取机构所有子节点,包括本身 DECLARE sTemp VARCHAR(10000); DECLARE sTempChd VARCHAR(10000); SET sTemp = rootId; SET sTempChd = rootId; WHILE sTempChd is not null DO SELECT group_concat(org_id) INTO sTempChd FROM org where FIND_IN_SET(parent_id,sTempChd) > 0; IF sTempChd is not null THEN SET sTemp = concat(sTemp,',',sTempChd); END IF; END WHILE; RETURN sTemp; END

 


 可以这样使用: select * from org where find_in_set(org_id,org_getChilds('1'));


 

 

select * from org where find_in_set(org_id,org_getParents('1'));



  sqlserver:

 

查询当前节点和他的祖先节点: CREATE FUNCTION [dbo].[org_getParents] ( -- Add the parameters for the function here @rootid varchar(50) ) RETURNS varchar(8000) AS BEGIN -- Declare the return variable here DECLARE @temp varchar(8000) DECLARE @tempid varchar(8000) -- Add the T-SQL statements to compute the return value here set @tempid=@rootid; set @temp=@rootid; while @tempid!='0' begin select @tempid=parent_id FROM org where org_id= @tempid; IF @tempid!='0' SET @temp =@temp+','+@tempid; end -- Return the result of the function RETURN @temp END


 

 查询当前节点和他的子孙节点 CREATE FUNCTION [dbo].[org_getChilds] ( -- Add the parameters for the function here @rootid varchar(50) ) RETURNS varchar(8000) AS BEGIN -- Declare the return variable here DECLARE @temp varchar(8000) -- Add the T-SQL statements to compute the return value here select @temp=org_id from org where org_id=@rootid while @@rowCount>0 select @temp=@temp+','+org_id from org where charindex(org_id,@temp)=0 and charindex(parent_id,@temp)>0 -- Return the result of the function RETURN @temp END


  可以这样用:

select * from org where charindex(org_id,dbo.org_getChilds('1'))>0

 

select * from org where charindex(org_id,dbo.group_getParents('1'))>0


 

 

分享到:
评论

相关推荐

    通过SQL Server操作MySQL的步骤和方法

    "SQL Server 操作 MySQL 的步骤和方法" 在多种数据库环境下,经常会遇见在不同数据库之间转换数据和互相进行操作的情况。下面是使用 SQL Server 操作 MySQL 的步骤和方法的详细说明: 1. 操作前的准备 在 SQL ...

    mysql转化成sql server sql转化成mysql工具

    总结,MySQL到SQL Server或反之的转换涉及到数据库对象的结构和数据的迁移,这可以通过专门的工具实现,如`mss2sql.rar`和`mysqltomssql.zip`。转换过程中需要注意语法差异、数据一致性、安全性和测试验证。理解这个...

    数据库转换工具MySQL 转为SqlServer 脚本

    3. **SSMA for MySQL**:该工具可以自动分析、转换MySQL的数据库架构和数据,并生成SQL Server兼容的脚本。用户可以预览转换结果,修复潜在问题,然后在目标SQL Server上执行脚本。 4. **转换过程**:主要包括以下...

    MySql与SqlServer的一些常用用法的差别

    在 SqlServer 中,使用 getdate() 函数来获取当前日期和时间,而在 MySql 中,使用 now() 函数来获取当前日期和时间。 五、新 id 生成 在 SqlServer 中,使用 newid() 函数来生成新的 id,而在 MySql 中,使用 ...

    mysql和SQLserver区别.docx

    SQL Server 中的 @@ROWCOUNT 变量可以获取最近一次查询或操作所影响的行数,而在 MySQL 中,需要使用 row_count() 函数来获取最近一次查询或操作所影响的行数。需要注意的是,MySQL 的 row_count() 函数只对 update...

    java语言的分页查询功能(mysql和sql server)

    本教程将详细讲解如何在Java中实现不分框架的分页查询,同时涵盖对MySQL和SQL Server数据库的支持。 一、基础知识 1. 分页概念:分页是将大量数据按一定数量分成若干部分,每次只加载一部分到内存中显示,用户可以...

    mysql与sqlserver的基础语法区别

    MySQL和SQL Server是两种广泛应用的关系型数据库管理系统(RDBMS),它们在基础语法上存在一些差异,这主要体现在数据定义、数据操作、查询语言以及事务处理等方面。以下将详细阐述这些区别。 一、数据定义(DDL)...

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 的查询语句执行顺序相同:开始->FROM 子句->WHERE 子句->GROUP BY 子句->HAVING 子句->ORDER BY 子句->SELECT 子句->LIMIT 子句。每个子句执行后都会产生一个中间结果,供接下来的子句...

    使用LabVIEW操作ACCESS、MySQL、SQL server数据库实现按照时间段查询数据

    SQL是结构化查询语言,适用于不同类型的数据库系统,如ACCESS、MySQL和SQL Server。虽然SQL有一个ANSI标准,但不同的数据库厂商会对其进行扩展,形成各自的“方言”。例如,Oracle的PL/SQL和Microsoft的T-SQL。不过...

    Mysql转Sqlserver.rar

    5. **函数和存储过程适配**:MySQL和SQL Server的函数库存在差异,需要检查并调整所有自定义函数和存储过程。 6. **应用程序更新**:修改连接字符串,确保应用程序能够正确连接到新的SQL Server数据库。 接下来,...

    SQL Server转换为MySQL工具

    10. 数据库版本兼容:SQL Server和MySQL的不同版本可能有不同的特性和限制,迁移时要考虑版本间的兼容性问题。 总之,“SQL Server转换为MySQL工具”是数据库迁移过程中的一项关键技术,它帮助用户克服了两个不同...

    SQL Server数据库数据转MySQL工具

    1. **数据结构映射**:SQL Server和MySQL的数据库结构可能存在差异,如数据类型、索引、约束等。转换工具需要能够识别这些差异并进行相应的调整,确保数据在目标数据库中的正确表示。 2. **数据迁移**:工具会逐表...

    Mysql和SQLserver区别.pdf

    Mysql可以使用cur_date()函数获取当前日期,而SQLserver可以使用getdate()函数获取当前日期和时间。 索引 Mysql创建非聚集索引只需要在创建表的时候指定为key,而SQLserver需要使用create unique nonclustered ...

    SQL Server 和 MySql 语法和关键字的区别——用于SQLServer到MySql的转换

    SQL Server 和 MySql 语法和关键字的区别——用于 SQLServer 到 MySql 的转换 SQL Server 和 MySql 是两种常用的关系型数据库管理系统,但是它们之间存在一定的语法和关键字差异。这些差异使得开发者在从 SQL ...

    Mysql与SQL Server区别

    这些比较函数和操作符为MySQL提供了强大的查询和过滤能力,使得开发人员能够灵活地处理各种数据类型和逻辑判断。 ### 总结 综上所述,MySQL与SQL Server各有千秋,选择哪一种取决于具体的应用场景和需求。MySQL以...

    sql server数据导入mysql方案

    【SQL Server数据导入...综上,SQL Server到MySQL的数据迁移可以通过多种方式实现,具体选择应根据实际需求、数据量以及对系统的依赖程度来决定。正确规划和执行迁移过程,可以确保业务的无缝过渡和数据的准确无误。

    mysql数据库转换成sql server

    - **SQL语法**:SQL Server和MySQL的SQL语法有所不同,例如,索引创建、事务处理、日期时间函数等,可能需要调整。 - **存储过程和触发器**:MySQL和SQL Server的存储过程和触发器语法有区别,转换时可能需要额外...

    通用SQL教程oracle,mysql,sqlserver

    本教程涵盖了SQL在三大主流数据库系统——Oracle、MySQL和SQL Server中的应用,旨在帮助学习者掌握通用的SQL知识,从而能够高效地进行数据查询、更新、插入和删除等操作。 在Oracle数据库中,SQL被广泛应用于数据的...

Global site tag (gtag.js) - Google Analytics