在具有自联接的表中进行插入的正确语句是什么?
如果我尝试进行经典插入,则会出现错误:
无法添加或更新子行:外键约束失败
这是我的插入查询:
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());
答案 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 |