2013-03-20 3 views
36

Есть ли способ вставить предварительно заданные значения и значения, которые я получаю из запроса select? Например:MySQL INSERT INTO ... VALUES и SELECT

INSERT INTO table1 VALUES ("A string", 5, [int]). 

У меня есть значение «Строка», и номер 5, но я найти [Int] значение из отборных так:

SELECT idTable2 
FROM table2 
WHERE ... 

что дает мне этот идентификатор для ввода внутри таблицы1.

Как слить это в одно заявление?

ответ

62

Используйте insert ... select запрос, и поставить известные значения в select:

insert into table1 
select 'A string', 5, idTable2 
from table2 
where ... 
+1

Проблема я нашел с этим подходом является то, что если 'SELECT' возвращает ноль записей, то утверждение преуспевает, но никакие данные не' INSERT'. –

+2

@ NeilC.Obremski: Да, но это только проблема, если вы ожидаете, что результат будет чем-то другим. Если вы хотите получить ошибку в этом случае, вы можете использовать подзапрос. – Guffa

+0

Большое вам спасибо, я искал интернет для этого – ComradeJoecool

1

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

INSERT INTO table1 
SELECT 'A string', 5, idTable2 idTable2 FROM table2 WHERE ... 
46

просто использовать подзапрос прямо как:

INSERT INTO table1 VALUES ("A string", 5, (SELECT ...)). 
+2

+1 для предоставления примера того, как это сделать, все еще используя синтаксис «VALUES». – EleventyOne

+1

этот метод может дать ошибку, например, «более 1 строки» –

+5

Это должно быть «INSERT INTO table1 VALUES (« Строка », 5, (SELECT ... LIMIT 1))». – Rahnzo

0

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

INSERT INTO table1 SELECT "A string", 5, idTable2 FROM table2 WHERE ... 
1
INSERT INTO table1 (col1, col2) 
SELECT "a string", 5, TheNameOfTheFieldInTable2 
FROM table2 where ... 
8

попробовать это

INSERT INTO TABLE1 (COL1 , COL2,COL3) values 
('A STRING' , 5 , (select idTable2 from Table2)) 
where ... 
+4

Как насчет нескольких столбцов из таблицы SELECT? Если я попытаюсь найти более одного столбца, я получаю 'Операнд должен содержать 1 столбец (ы)'. –

5

Все другие ответы решает эту проблему и мой ответ работает точно так же, как и другие, но только на более назидательно (это работает на MySQL ... не знаю других SQL-серверов):

INSERT INTO table1 SET 
    stringColumn = 'A String', 
    numericColumn = 5, 
    selectColumn = (SELECT idTable2 FROM table2 WHERE ...); 

Вы можете обратиться к документации MySQL: INSERT Syntax

10
 
INSERT INTO table_name1 
      (id, 
      name, 
      address, 
      contact_number) 
SELECT id, name, address, contact_number FROM table_name2; 
Смежные вопросы