我想这个问题已经在这里被问过,但我不知道如何正确地命名(并寻找)它。
数据库:
/*
现在在插入中我应该自己计算CREATE TABLE department (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE employee (
id INTEGER PRIMARY KEY AUTOINCREMENT,
department_id INTEGER NOT NULL,
chief_id INTEGER,
name VARCHAR(100) NOT NULL UNIQUE,
salary INTEGER NOT NULL,
FOREIGN KEY (department_id) REFERENCES department (id),
FOREIGN KEY (chief_id) REFERENCES employee (id)
);
INSERT INTO department (name) VALUES ('sales'), ('it'), ('management');
INSERT INTO employee (department_id, chief_id, name, salary) VALUES
(3, NULL, 'Owner', 1000000),
(2, 1, 'Team manager', 9000),
(2, 3, 'Senior dev #1', 7000),
(2, 3, 'Senior dev #2', 7000);
,但我很好奇是否有可能通过名字获取id,如
chief_id
并在insert中使用此值而不是硬编码的id。
我尝试过使用select语句而不是id,但这不起作用。
我正在使用SQLite。
答案 0 :(得分:2)
您可以使用子查询来执行此操作,但必须先将数据放在表中,然后才能选择它。否则,子查询返回null。因此,您需要将INSERT
分成多个INSERT
。
INSERT INTO employee (department_id, chief_id, name, salary) VALUES
(3, NULL, 'Owner', 1000000);
INSERT INTO employee (department_id, chief_id, name, salary) VALUES
(2, (SELECT id FROM employee WHERE name = 'Owner'), 'Team manager', 9000);
INSERT INTO employee (department_id, chief_id, name, salary) VALUES
(2, (SELECT id FROM employee WHERE name = 'Team manager'), 'Senior dev #1', 7000),
(2, (SELECT id FROM employee WHERE name = 'Team manager'), 'Senior dev #2', 7000);
但请注意,子查询必须只返回一行。因此,您在其WHERE
子句中检入的列必须包含唯一值。通常一个名字不是唯一的,有很多约翰史密斯。通常,ID是唯一标识符。因此,通常直接插入ID是正确的方法。