INSERT INTO ...在连接运算符中选择语法错误

时间:2012-06-23 21:06:51

标签: c# asp.net sql

我正在尝试将购物篮写入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;

3 个答案:

答案 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}}。但是,如何指定插入使用哪个订单行?

可能的解决方案:

  1. 首先使用klant id
  2. 编写订单
  3. 创建订单行。您知道第一个查询中的orderid(f.e。使用Jerry
  4. 使用总计更新订单

答案 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;