我有一个stock_details
视图:
item INTEGER,
quantity NUMERIC(8,2),
discount NUMERIC(8,2),
taxable NUMERIC(8,2),
tax NUMERIC(8,2),
unique_serial CHARACTER VARYING(50)
.....
我还有两个表:
invoice_item(
id SERIAL PRIMARY KEY,
item INTEGER,
quantity NUMERIC(8,2),
discount NUMERIC(8,2),
taxable NUMERIC(8,2),
tax NUMERIC(8,2),
)
和
unique_invoice_item(
invoice_item INTEGER PRIMARY KEY,
unique_serial CHARACTER VARYING(50),
item INTEGER,
..............,
UNIQUE(unique_serial),
UNIQUE(unique_serial, item),
FOREIGN KEY (invoice_item) REFERENCES invoice_item(id)
}
我希望将stock_details
上的选择查询中的数据插入invoice_item
和unique_invoice_item
。我尝试使用以下查询执行此操作:
WITH t AS (
INSERT INTO invoice_item AS ii (item, quantity, discount, taxable, tax)
SELECT s.item, s.quantity, s.discount, s.taxable, s.tax
FROM stock_details AS s WHERE ..........
RETURNING ii.id, s.unique_serial
)
INSERT INTO unique_invoice_item
SELECT t.id, s.unique_serial, ........
FROM t JOIN stock_details AS s ON t.unique_serial = s.unique_serial
但是上面的查询不正确,因为它无法返回CTE中的s.unique_serial。
现在我的问题:
有没有办法可以在CTE中返回s.unique_serial列?
OR
还有其他方法可以实现这一目标吗?
注意除了invoice_item
以及id
,invoice_item
和unique_serial
之外,unique_serial, item
表格中没有任何唯一内容是unique_invoice_item
表中的所有唯一列。 item
中的invoice_item
列和表item
中的列unique_invoice_item
都引用了一个共同的外表。
答案 0 :(得分:0)
我认为,根据我的经验,你无法直接获得s.unique_serial
。我建议你采取以下两种方式:
unique_serial
中添加列invoice_item
并同时插入其值,您可以在Returning
stock_details
中的每条记录进行循环。所以你有你想要的所有数据。希望我的回答能帮到你。
答案 1 :(得分:0)
不确定,但是从另一篇文章看,你似乎可以使用这样的东西
WITH x AS (
SELECT s.item, s.quantity, s.discount, s.taxable, s.tax, s.unique_serial
FROM stock_details AS s WHERE ..........),
t AS (
INSERT INTO invoice_item AS ii (item, quantity, discount, taxable, tax)
values(x.item, x.quantity, x.discount, x.taxable, x.tax)
RETURNING ii.id, s.unique_serial
)
INSERT INTO unique_invoice_item
SELECT t.id, s.unique_serial, ........
FROM t JOIN stock_details AS s ON x.unique_serial = s.unique_serial