2012-04-19 38 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) 

Đó là cú pháp của tôi, nhưng tôi nhận được một lỗi nói:chèn vào MySQL TỪ khác bảng

Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn rằng tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần 'SELECT id như campaign_id, 'Tái tạo sang các chiến dịch' như mô tả, budget_remaini' tại dòng 2

Tôi đang làm gì sai ?

+1

Không sử dụng 'VALUES'. –

Trả lời

11

Vì bạn đang lựa chọn từ một bảng sau đó bạn sẽ muốn sử dụng một truy vấn INSERT INTO SELECT FROM:

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 

Chỉ sử dụng INSERT INTO VALUES khi bạn đang sử dụng các giá trị cụ thể và không chọn từ một bảng. Nếu bạn muốn sử dụng INSERT INTO VALUES sau đó truy vấn của bạn sẽ như thế này:

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

Các VALUES phần của truy vấn là không cần thiết. Ví dụ:

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; 
Các vấn đề liên quan