2012-04-19 9 views
6
INSERT INTO campaign_ledger (`campaign_id`, `description`, amount, balance, timestamp) 
VALUES (SELECT id as campaign_id, 'Ported from campaigns' as description, budget_remaining as amount, budget_remaining as balance, NOW() as timestamp FROM campaigns) 

Esa es mi sintaxis, pero me da un error que dice:insertar en MySQL desde otra mesa

Usted tiene un error en su sintaxis SQL; consulte el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'SELECT id como campaign_id,' portado de campañas como descripción, budget_remaini' en la línea 2

¿Qué estoy haciendo mal ?

+1

No utilice 'VALUES'. –

Respuesta

11

Puesto que usted está seleccionando de una tabla, entonces tendrá que utilizar un INSERT INTO SELECT FROM consulta:

INSERT INTO campaign_ledger 
(
    `campaign_id` 
    , `description` 
    , amount 
    , balance 
    , timestamp 
) 
SELECT 
    id as campaign_id 
    , 'Ported from campaigns' as description 
    , budget_remaining as amount 
    , budget_remaining as balance 
    , NOW() as timestamp 
FROM campaigns 

Sólo utilice INSERT INTO VALUES cuando está utilizando valores específicos y no seleccionar de una tabla. Si desea utilizar INSERT INTO VALUES entonces su consulta sería la siguiente:

INSERT INTO campaign_ledger 
(
    `campaign_id` 
    , `description` 
    , amount 
    , balance 
    , timestamp 
) 
VALUES 
(
    1 
    , 'test' 
    , 100.00 
    , 1000.00 
    , NOW() 
) 
2
INSERT INTO campaign_ledger (`campaign_id`, `description`, amount, balance, timestamp) 
SELECT id as campaign_id, 'Ported from campaigns' as description, 
budget_remaining as amount,budget_remaining as balance, 
NOW() as timestamp FROM campaigns; 
2

La parte VALUES de la consulta no es necesario. Por ejemplo:

INSERT INTO campaign_ledger (`campaign_id`, `description`, amount, balance, timestamp) 
SELECT id as campaign_id, 'Ported from campaigns' as description, 
     budget_remaining as amount, budget_remaining as balance, 
     NOW() as timestamp 
FROM campaigns;