oracle 递归查询

11111

怎么可以实现将 id=1 的 指标 赋值个 id =2 和 3

@论坛小助手

您的问题可能存在误解,实际上据我所知,OceanBase 社区版主要支持 MySQL 模式的递归查询语法,而不是 Oracle 模式的递归查询(如 CONNECT BYSTART WITH)。在 MySQL 模式下,可以使用 WITH RECURSIVE 语句来实现递归查询。

根据您提供的需求,“将 id=1 的指标赋值给 id=2id=3”,可以通过以下步骤实现:

1. 使用递归查询获取层级关系

假设您的表结构如下:

CREATE TABLE metrics (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    parent_id INT
);

插入数据:

INSERT INTO metrics (id, name, parent_id) VALUES 
(1, 'aaa', NULL),
(2, 'm', 1),
(3, '2334', 2);

您可以使用递归查询获取层级关系:

WITH RECURSIVE cte AS (
    SELECT id, name, parent_id, 0 AS level
    FROM metrics
    WHERE id = 1 -- 从 id=1 开始
    UNION ALL
    SELECT m.id, m.name, m.parent_id, c.level + 1
    FROM metrics m
    INNER JOIN cte c ON m.parent_id = c.id
)
SELECT * FROM cte;

2. 更新 id=2id=3 的值

如果需要将 id=1 的某个字段值(例如 name)赋值给 id=2id=3,可以执行以下更新语句:

UPDATE metrics
SET name = (SELECT name FROM metrics WHERE id = 1)
WHERE id IN (2, 3);

注意事项

  • 如果您需要的是 Oracle 模式的递归查询语法,请确认是否使用了 OceanBase 的企业版,并且启用了 Oracle 兼容模式。
  • 如果您的需求更复杂,请提供更多上下文信息或表结构,以便进一步帮助您解决问题。

更多信息请查看:

  1. 阅读和管理 OceanBase 数据库 SQL 执行计划
  2. 闪回查询
  3. 日志
  4. 数据类型转换规则
  5. 查询中使用时间函数
  6. OceanBase 与 LangChain 集成
  7. 全文查询
  8. log_restore_concurrency
  9. oceanbase.DBA_IND_STATISTICS