在自联接表中插入语句

时间:2019-01-16 15:34:14

标签: mysql sql

在具有自联接的表中进行插入的正确语句是什么?

如果我尝试进行经典插入,则会出现错误:

  

无法添加或更新子行:外键约束失败

这是我的插入查询:

insert into mTable(record_name,self_fk,val, note, ref,insert_date, end_date)
    values('processo prova',0,1,'nota di prova', 'az12345', NOW(), NOW());

1 个答案:

答案 0 :(得分:1)

在您的INSERT查询中,您所引用的foreign key(id为0)不存在->约束失败

在回滚之前,我在您的编辑中看到了CREATE TABLE脚本。

包含对父项的引用的字段是通过以下方式创建的:

`id_processo_padre` int(11) NOT NULL DEFAULT '1'

我建议您编辑此字段以使其可为空:

ALTER TABLE `mTable` MODIFY `id_processo_padre` int(11) NULL;

这将允许您INSERT的第一个顶级父级(或任何顶级父级)

insert into mTable(record_name, self_fk, ...)
            values('processo prova', NULL, ...);
--                                   ^--^----------This

自己测试:

模式(MySQL v5.7)

CREATE TABLE test
(
  id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  parent_id INT(6) NULL,
  someData VARCHAR(255),
  FOREIGN KEY (parent_id) REFERENCES test(id)
);

INSERT INTO test VALUES (default, null, "parent"),
                        (default, 1, "child1_1"),
                        (default, 1, "child1_2"),
                        (default, 3, "child2_2");

查询#1

SELECT t1.*, t2.someData AS "My parent's name" FROM test t1
LEFT JOIN test t2
ON t2.id = t1.parent_id
ORDER BY t1.id ASC;

输出

| id  | parent_id | someData | My parent's name |
| --- | --------- | -------- | ---------------- |
| 1   | null      | parent   | null             |
| 2   | 1         | child1_1 | parent           |
| 3   | 1         | child1_2 | parent           |
| 4   | 3         | child2_2 | child1_2         |

View on DB Fiddle