从表中获取值以在插入中使用它

时间:2018-05-19 18:20:56

标签: sql sqlite

我想这个问题已经在这里被问过,但我不知道如何正确地命名(并寻找)它。

数据库:

/*

现在在插入中我应该自己计算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。

1 个答案:

答案 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是正确的方法。