SQL - выбор внутри ВСТАВКИ ЗНАЧЕНИЯ

Как я могу сделать SELECT внутри операции INSERT?

insert into tableX (a_id, b_id) 
VALUES ((SELECT service_id 
         FROM tableY 
         WHERE id = 10, 2));

но получите сообщение об ошибке.. Что там не так?

Спасибо

Ответ 1

В то время как мой первоначальный ответ дал рабочее решение, я действительно ошибался в причине ошибки. Нет ничего плохого в использовании скалярного подзапроса внутри предложения VALUES. Проблема с утверждением в вопросе заключается в том, что одна скобка находится в неправильном месте; скалярный подзапрос должен быть заключен в круглые скобки.

Это должно работать:

insert into tableX (a_id, b_id) 
VALUES (
  (SELECT service_id 
         FROM tableY 
         WHERE id = 10)
  , 2
  );

Оригинальный ответ

VALUES может использоваться только в сочетании с буквальными значениями. Однако в подзапросе можно использовать литеральные значения. Сделайте это:

insert into tableX (a_id, b_id) SELECT service_id, 2 FROM tableY WHERE id = 10

Ответ 2

Вам не нужно ключевое слово values, а также вы можете добавить значение по умолчанию 2 для столбца b_id в списке выбора вместо добавления его после оператора SELECT

Попробуйте следующее:

INSERT INTO tableX (a_id, b_id) 
SELECT service_id, 2 
  FROM tableY 
 WHERE id = 10

Ответ 3

вам не нужно слово values.

вот некоторая документация для mysql

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

также, когда вы указываете столбцы, в которые должны быть вставлены значения, вам нужно убедиться, что ваш выбор возвращает тот же номер/типы, который соответствует указанному вами.

Ответ 4

Вы сообщаете СУБД, что вы вставляете два значения (a_id, b_id), но только выбираете один (service_id).

Ответ 5

Try:

insert into tableX (a_id, b_id)
SELECT service_id, 4 as QUESTIONMARK FROM tableY WHERE id in (10, 2);

Это работает на многих механизмах баз данных, однако мы не знаем, в какой среде вы работаете.

EDIT: какова вторая вставка?

Ответ 6

В моем SQL можно вставить динамические значения. Вот пример INSERT INTO Item_Info (Back_Ground_Color,) VALUES ((выберите concat ('#', SUBSTRING ((lpad (hex (round (rand() * 10000000)), 6,0)), - 6))));