mysql - > вставить в tbl (выбрать из другой таблицы) и некоторые значения по умолчанию


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

INSERT INTO def (catid, title, page, publish) 
(SELECT catid, title from abc),'page','yes')


INSERT INTO def (catid, title, page, publish) 
VALUES
((SELECT catid, title from abc),'page','yes'))

первый запрос дает ошибку MySQL, а второй дает количество столбцов не совпадает.

что мне нужно делать?

5 82

5 ответов:

вы просто должны сделать:

INSERT INTO def (catid, title, page, publish) 
SELECT catid, title, 'page','yes' from `abc`

Если вы хотите скопировать подмножество исходной таблицы можно сделать:

INSERT INTO def (field_1, field_2, field3)

SELECT other_field_1, other_field_2, other_field_3 from `abc`

или скопировать все поля от исходной таблицы до целевой таблицы вы можете сделать более просто:

INSERT INTO def 
SELECT * from `abc`

Если вы хотите вставить все столбцы, затем

insert into def select * from abc;

здесь количество столбцов в def должно быть равно abc.

Если вы хотите вставить подмножество столбцов, то

insert into def (col1,col2, col3 ) select scol1,scol2,scol3 from abc; 

Если вы хотите вставить некоторые жестко записанные значения, то

insert into def (col1, col2,col3) select 'hardcoded value',scol2, scol3 from abc;
INSERT INTO def (field_1, field_2, field3) 
VALUES 
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')

С MySQL, если вы вставляете в таблицу, которая имеет первичный ключ автоматического приращения, и вы хотите использовать встроенную функцию MySQL, такую как NOW() затем вы можете сделать что-то вроде этого:

INSERT INTO course_payment 
SELECT NULL, order_id, payment_gateway, total_amt, charge_amt, refund_amt, NOW()
FROM orders ORDER BY order_id DESC LIMIT 10;