【问题标题】:how to get values from same table using SQL query or HQL query如何使用 SQL 查询或 HQL 查询从同一个表中获取值
【发布时间】:2016-01-08 07:15:31
【问题描述】:

嗨,我需要从下表中获取数据,我将只传递 id 5,但我需要获取所有 5 行(对于 orgid 5,批准 org 为 4,因此我们选择它,同样对于 orgid 4,批准 org 是3,它一直持续到批准 org id 0)

 ORG_ID  name   APPROVING_ORG_ID
  1     name 1     0
  2     name2      1
  3     name 3     2
  4     name 4     3
  5     name 5     4

【问题讨论】:

  • 审批深度有限制吗?例如。不超过 5 个?

标签: mysql sql hql


【解决方案1】:

尝试在 sql 中创建函数。这可能对你有帮助

  CREATE DEFINER=`root`@`localhost` FUNCTION `GetAllNode`(GivenID INT) RETURNS text CHARSET latin1
        DETERMINISTIC
    BEGIN
        DECLARE rv,q,queue,queue_children TEXT;
        DECLARE queue_length,front_id,pos INT;
        SET rv = '';
        SET queue = GivenID;
        SET queue_length = 1;
        WHILE queue_length > 0 DO
            SET front_id = queue;
            IF queue_length = 1 THEN
                SET queue = '';
            ELSE
                SET pos = LOCATE(',',queue) + 1;
                SET q = SUBSTR(queue,pos);
                SET queue = q;
            END IF;
            SET queue_length = queue_length - 1;
            SELECT IFNULL(qc,'') INTO queue_children
            FROM (SELECT GROUP_CONCAT(CAST(ORG_ID AS CHAR(50))) AS qc
            FROM `yourtablename` WHERE `APPROVING_ORG_ID` = front_id) A ;
            IF LENGTH(queue_children) = 0 THEN
                IF LENGTH(queue) = 0 THEN
                    SET queue_length = 0;
                END IF;
            ELSE
                IF LENGTH(rv) = 0 THEN
                    SET rv = queue_children;
                ELSE
                    SET rv = CONCAT(rv,',',queue_children);
                END IF;
                IF LENGTH(queue) = 0 THEN
                    SET queue = queue_children;
                ELSE
                    SET queue = CONCAT(queue,',',queue_children);
                END IF;
                SET queue_length = LENGTH(queue) - LENGTH(REPLACE(queue,',','')) + 1;
            END IF;
        END WHILE;
        RETURN rv;
    END

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2012-03-13
    • 2020-09-22
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多