请帮我建立一个请求。
有一个有 3 张桌子的基地:人、汽车、人与汽车的联系(每个人可以有很多辆车)
create table peoples (
id integer primary key autoincrement,
fio text,
...
);
create table cars (
id integer primary key autoincrement,
car text,
...
);
create table relations (
id integer primary key autoincrement,
fio_id integer,
car_id integer
);
有没有办法在一个查询中插入:一个新人(在 peoples 表中)并立即将汽车绑定到他(在关系表中)
本质上,问题是如何插入刚刚创建的帖子的 id。
很长的路要走:
- 将人员的 fio 插入人员表中
- 在peoples表中通过fio搜索一个人的id(因为下一步需要这个id)
- 在关系表中插入人员 ID 和汽车 ID
也许更容易一些?并且可以一次吃三桌的可能吗?(会很酷)
不。SQLite(和所有其他 DBMS)仅支持单表插入。一些 DBMS(如 Postgress)允许您插入 CTE - 但 SQLite 不是其中之一。唉,三个表 - 三个 INSERT。
但是第 2 点和第 3 点可以合并为一个查询 - 使用 INSERT .. SELECT,而不是 INSERT .. VALUES:
MAX()
允许您在存在完全匹配的全名和/或机器名的情况下选择最后插入的记录。或者,对于最后一个查询中的明确选择,需要额外的选择条件 - 但应保证其 SELECT 部分将准确返回一条记录(在最极端的情况下,添加排序和限制)。