2011-10-10 208 views
3

我试图插入值到选定的表中的列,但只插入MySQL语句的结果。 select语句本身正确工作并返回结果。MySQL插入语句(插入到表(列)选择语句)

当用INSERT语句是合并失败,

error incorrect syntax near `dedspgoods`.`case number`. 

谁能帮助我正确的语法?我erronous语法如下:

insert into despgoods_alldetails 
    (`case number`, weight, customer, transporttypename) 
values 
(select despgoods.`case number` 
     , despgoods.weight 
     , despgoods.customer 
     , customers.transporttypename 
    from despgoods 
    inner join customers 
     on despgoods.customer = customers.customer) 
+0

select despgoods.'case number' , despgoods.weight , despgoods.customer , customers.transporttypename from despgoods inner join customers on despgoods.customer = customers.customer 

,如果你要插入的结果集的SELECT的那么试试这个(通知没有VALUES条款SELECT的作用是什么? –

+0

作品的选择是: – Smudger

+0

选择'despgoods'.case编号,'despgoods'.'weight','despgoods'.'c ustomer','customers'.'transporttypename' from despgoods inner join customers on despgoods.'customer' ='customers'.'customer') – Smudger

回答

15

如果这是工作的SELECT

insert into despgoods_alldetails 
    (`case number`, weight, customer, transporttypename) 
select despgoods.`case number` 
    , despgoods.weight 
    , despgoods.customer 
    , customers.transporttypename 
from despgoods 
    inner join customers 
    on despgoods.customer = customers.customer 
+0

嗨@ypercube。非常感谢,语法完美。 apprecaite的帮助。 – Smudger

+0

只需注意,使用'INSERT INTO' ** ** **可以使用具有行列表**或** SELECT'列表的'VALUES'。 –

+0

并尝试在表或列名称中没有空格。你可以使用'case_number'或'CaseNumber'。它使得它更容易,因为您不必每次都重新引用它。 –

2

case是一个保留字。需要将“案例编号”放在引号中。

+0

嗨,我插入''在字段周围,格式不包括在我提交评论时 – Smudger

+0

@Ryan:尝试编辑你的问题。将代码粘贴到您的问题中,然后选择它并点击**代码**图标:**'{}'**。这会将代码格式化为代码。 –

1

这里有云

INSERT INTO despgoods_alldetails(
            casenumber, 
            weight, 
            customer, 
            transporttyplename) 


VALUES(SELECT desp.casenumber, 
     desp.weight, 
     despgoods.customer, 
     customers.transporttypename) 

FROM despgoods 
INNER JOIN customers on despgoods.customer = customers.customer 

那里。这应该可以正常工作。请记住,不要用空格来命名变量,因为它会变得非常棘手。我认为你的case数是个错误,因为它之间有一个空格,case是MySQL中的一个函数。需要帮助请叫我。

3

正如@EdHeal说,你需要附上引号或反引号之间case number,因为在列名的空间(事实上,CASE是一个保留字实际上只是一个有趣的细节,但是这不是什么在这种情况下打破查询)。

insert into despgoods_alldetails (`case number`,weight,customer,transporttypename) 
values (
    select despgoods.`case number`, despgoods.weight, despgoods.customer, customers.transporttypename 
    from despgoods 
    inner join customers on (despgoods.customer=customers.customer) 
)