我正在用SQLite3和Haskell库HDBC构建一个SQL数据库,以便从我的程序连接到数据库。它用于跟踪产品的销售(即在EPOS上(。该模式大致如下,为简洁起见进行了修改:
create table products (
product_id integer primary key autoincrement,
product_name text,
product_price integer
);
create table sales (
sales_id integer primary key auto increment
sales_date date,
number_sold integer
);
create table products_sales_xref (
product_id integer references products,
sales_id integer primary key references sales
);
我想在销售中插入一个值(即,当记录/进行销售时(,然后能够获得自动递增的sales_id
的值,并在插入交叉引用表中使用该值。我试过类似的东西:
INSERT INTO products_sales_xref (product_id, sales_id) VALUES (2,
(INSERT INTO sales (sales_date, number_sold)
VALUES ('2022-08-05', 25) RETURNING sales_id)
);
-- or
INSERT INTO products_sales_xref (product_id, sales_id)
SELECT 2, * from (
INSERT INTO sales (sales_date, number_sold) VALUES ('2022-08-05', 25) RETURNING sales_id
);
由于解析错误CCD_ 2而失败。似乎我不能在子查询中使用INSERT?有没有办法在外部参照插入语句中使用此值?如果新值以某种方式介于第一个插入和第二个插入之间,我宁愿不使用get_last_rowid。
一条语句可以插入到一个表中!