我正在尝试将购物篮写入C#asp.net的sql数据库中的订单+订单行。 订单行将包含购物篮中每件商品的订单号,总价,产量,数量等。订单本身将包含ordernumber作为主键,并将通过它链接到不同的行。 昨天一切正常,但是现在当我尝试在insert into语句中使用SELECT命令来使事情更加动态时,我得到了上述语法错误。
有人知道这句话有什么问题:
INSERT INTO [order]
(klant_id,totaalprijs,btw,subtotaal,verzendkosten)
SELECT klant.id
, SUM(orderregel.totaalprijs)
, SUM(orderregel.btw)
, SUM(orderregel.totaalprijs) - SUM(orderregel.btw)
, 7.50
FROM orderregel
INNER JOIN
klant
ON [order].klant_id = klant.id
WHERE klant.username = 'jerry'
GROUP BY
id;
“order”表中的ordernumber是自动编号的,在asp代码后面有一个用于处理为每个产品写入的行的每一个,在这个循环外面有一个索引设置为0并且每个都增加1结束了。订单的执行查询仅在第一个循环开始时执行一次,并且以MAX(ordernumber)作为ordernumber后添加行。
我希望我提供了足够的信息,有人能够帮助我。 提前谢谢!
编辑: 谢谢大家,使用这个查询做到了!
INSERT INTO [order] (klant_id,totaalprijs,btw,subtotaal,verzendkosten)SELECT(SELECT klant.id FROM klant WHERE klant.username ='jerry'),
SUM(orderregel.totaalprijs),SUM(orderregel.btw),
SUM(orderregel.totaalprijs) - SUM(orderregel.btw),7.50 FROM
orderregel;
答案 0 :(得分:3)
你在JOIN中使用了[order]
,我想它应该是orderregel
。
FROM orderregel
INNER JOIN klant ON [order].klant_id = klant.id
应该是:
FROM orderregel
INNER JOIN klant ON orderregel.klant_id = klant.id
修改强>
为什么不使用:
INSERT INTO [order]
(klant_id,totaalprijs,btw,subtotaal,verzendkosten)
SELECT (SELECT klant.id FROM klant WHERE klant.username = 'jerry')
, SUM(orderregel.totaalprijs)
,...
...并避免使用klant table加入?
答案 1 :(得分:1)
您无法参考正在插入的表格。毕竟,在插入完成之前,那些行还没有出现!
阅读您的查询,很明显您正在尝试插入名为klant
的{{1}}。但是,如何指定插入使用哪个订单行?
可能的解决方案:
Jerry
答案 2 :(得分:0)
试试这个:
插入[订购]
(klant_id,totaalprijs,顺便说一句,subtotaal,verzendkosten)
选择klant.id
,SUM(orderregel.totaalprijs)
,SUM(orderregel.btw)
,SUM(orderregel.totaalprijs) - SUM(orderregel.btw)
,7.50
来自orderregel
INNER JOIN klant ON orderregel.id = klant.id
INNER JOIN [order] ON [order] .klant_id = klant.id
在哪里klant.username ='jerry'
GROUP BY id;