Как я могу сделать SELECT внутри операции INSERT?
insert into tableX (a_id, b_id)
VALUES ((SELECT service_id
FROM tableY
WHERE id = 10, 2));
но получите сообщение об ошибке.. Что там не так?
Спасибо
Как я могу сделать SELECT внутри операции INSERT?
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)
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
Вам не нужно ключевое слово values, а также вы можете добавить значение по умолчанию 2 для столбца b_id в списке выбора вместо добавления его после оператора SELECT
Попробуйте следующее:
INSERT INTO tableX (a_id, b_id)
SELECT service_id, 2
FROM tableY
WHERE id = 10
вам не нужно слово values
.
вот некоторая документация для mysql
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
также, когда вы указываете столбцы, в которые должны быть вставлены значения, вам нужно убедиться, что ваш выбор возвращает тот же номер/типы, который соответствует указанному вами.
Вы сообщаете СУБД, что вы вставляете два значения (a_id, b_id), но только выбираете один (service_id).
Try:
insert into tableX (a_id, b_id)
SELECT service_id, 4 as QUESTIONMARK FROM tableY WHERE id in (10, 2);
Это работает на многих механизмах баз данных, однако мы не знаем, в какой среде вы работаете.
EDIT: какова вторая вставка?
В моем SQL можно вставить динамические значения. Вот пример
INSERT INTO Item_Info (Back_Ground_Color
,) VALUES ((выберите concat ('#', SUBSTRING ((lpad (hex (round (rand() * 10000000)), 6,0)), - 6))));