使用MySQL的路径枚举树模型

时间:2014-04-20 21:35:41

标签: mysql sql tree

我想在我的数据库架构中使用Path Enumeration层次模型。 问题是MySQL不允许我在同一个表上有一个子查询来检索父行路径。

有没有办法在不创建临时表的情况下解决这个问题?

这是我桌子的DDL:

CREATE TABLE COC_FIELD
(
    field_id VARCHAR(255) PRIMARY KEY NOT NULL,
    name VARCHAR(255),
    query_id VARCHAR(255) NOT NULL,
    path_enumeration VARCHAR(1000),
    FOREIGN KEY ( report_query_id ) REFERENCES COC_QUERY ( query_id )
);

插入子行的语句(MySQL中不允许):

insert into COC_FIELD(field_id, name, report_query_id, path_enumeration)
values('field_2', 'Month', 'query_1', CONCAT(
    (select path_enumeration from COC_FIELD where field_id = 'field_2'),
    '/', 'field_3'))

1 个答案:

答案 0 :(得分:0)

使用变量是否适合您?

SET @path = (SELECT path_enumeration FROM COC_FIELD WHERE field_id = 'field_2');

INSERT INTO COC_FIELD(field_id, name, path_enumeration)
VALUES ('field_2', 'Month', CONCAT(IFNULL(@path, ''), '/', 'field_3'));

第一个语句设置一个名为path的变量,然后将在insert语句中使用该变量。我使用了额外的IFNULL检查,以防止在null为空时获取@path值。

请注意,我必须删除report_query_id字段以进行测试。