Оператор вставки MySQL (вставить в таблицу (столбцы) оператор выбора)

Я пытаюсь вставить значения в выбранные столбцы таблицы, но вставляю только результаты оператора MySQL. оператор select работает правильно сам по себе и возвращает результаты.

в сочетании с оператором вставки он терпит неудачу с

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

Может ли кто-нибудь помочь мне с правильным синтаксисом? мой ошибочный синтаксис выглядит следующим образом:

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 )

person Smudger    schedule 10.10.2011    source источник
comment
Что SELECT работает?   -  person ypercubeᵀᴹ    schedule 10.10.2011
comment
выберите despgoods.case number,despgoods.weight,despgoods.customer,customers.transporttypename из despgoods внутреннего соединения клиентов на despgoods.customer=customers.customer)   -  person Smudger    schedule 10.10.2011
comment
Обратите внимание, что каждое поле имеет ' ' вокруг них, просто не сохраняется при отправке комментария. Спасибо   -  person Smudger    schedule 10.10.2011
comment
Вероятно, у него есть обратные кавычки: `weight`, а не одинарные кавычки: 'weight'   -  person ypercubeᵀᴹ    schedule 10.10.2011
comment
Вы не можете просто взять все в кавычки. вы можете поместить «номер дела» в одинарные кавычки, но не значения или имена ваших столбцов.   -  person Nathan    schedule 10.10.2011
comment
@Ryan: я отредактировал твой вопрос. Проверьте, что это то, что у вас есть.   -  person ypercubeᵀᴹ    schedule 10.10.2011


Ответы (4)


Если это SELECT работает:

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

Затем попробуйте это (обратите внимание, что нет предложения VALUES, если вы хотите вставить набор результатов 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
person ypercubeᵀᴹ    schedule 10.10.2011
comment
Привет @ypercube. Спасибо большое, синтаксис работает отлично. оцените помощь. - person Smudger; 10.10.2011
comment
Просто обратите внимание, что с INSERT INTO вы либо используете VALUES со списком строк, или SELECT. - person ypercubeᵀᴹ; 10.10.2011
comment
И постарайтесь не иметь пробелов в именах таблиц или столбцов. Вы можете использовать case_number или CaseNumber. Это упрощает задачу, так как вам не нужно каждый раз цитировать ее. - person ypercubeᵀᴹ; 10.10.2011

Как указано @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)
)
person Romain    schedule 10.10.2011

case — зарезервированное слово. Необходимо указать «номер дела» в кавычках.

person Ed Heal    schedule 10.10.2011
comment
привет, я вставляю `` вокруг полей, форматирование не включается, когда я отправляю комментарий - person Smudger; 10.10.2011
comment
@Ryan: попробуйте отредактировать свой вопрос. Вставьте код в свой вопрос, затем выберите его и нажмите значок Код: {}. Это отформатирует ваш код как code. - person ypercubeᵀᴹ; 10.10.2011

вот оно

 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

там. это должно работать нормально. Помните, не называйте свои переменные пробелами, потому что это может стать очень сложным. Я думаю, что у вас была ошибка в номере случая, потому что между ними есть пробел, когда случай является функцией в MySQL. Позвольте мне знать, если вам нужно что-нибудь еще.

person Nathan    schedule 10.10.2011