首页 > 解决方案 > 为什么mysql结果不一样

问题描述

我想通过代码选择一棵树,但是当我更改数据ID时,结果会有所不同。</p>

执行以下sql:

    DROP TABLE IF EXISTS `tree`;
CREATE TABLE `tree`  (
  `id` bigint(11) NOT NULL,
  `p_code` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of tree
-- ----------------------------
INSERT INTO `tree` VALUES (1, '0', '中国', '1');
INSERT INTO `tree` VALUES (2, '1', '四川省', '2');
INSERT INTO `tree` VALUES (3, '2', '成都市', '3');
INSERT INTO `tree` VALUES (4, '3', '武侯区', '4');
INSERT INTO `tree` VALUES (5, '4', '红牌楼', '5');
INSERT INTO `tree` VALUES (6, '1', '广东省', '6');
INSERT INTO `tree` VALUES (7, '1', '浙江省', '7');
INSERT INTO `tree` VALUES (8, '6', '广州市', '8');

通过流动的 sql 选择:

  SELECT v1.code,v1.id, v1.p_code, v1.name,@pv
      FROM tree v1,
      (SELECT @pv :='1') v2
      WHERE (v1.code = @pv) or  ( FIND_IN_SET(v1.p_code, @pv) and @pv := concat(@pv, ',', v1.code) )

sql结果(这个结果是我想要的): 在此处输入图像描述

现在,当我更改父 id(1 -> 10)(id 值大于子 id 值)时,执行 sql 选择。结果改变: 在此处输入图像描述

在此处输入图像描述

为什么?太混乱了

标签: mysqlsql

解决方案


推荐阅读