2017-03-12 55 views
0

我試圖將ms_pricems_name的值插入到另一個表中,該表是service_typeservice_amount列的記錄。將表中的值插入另一個表

ms_pricelist

| ms_priceID | ms_Name | ms_price | 
|------------|---------|----------| 
| 7894  |Casing | 17.0897 | 
| 7895  |Fan  | 69.9902 | 

記錄

| customerID | service_type | service_amount | 
|------------|--------------|----------------| 
| 1000712 | Casing  | 17.2311  | 
| 1000712 | Trunion  | 189.9900  | 

這裏是我的代碼。

INSERT INTO records (service_type, service_amount) 
    SELECT ms_pricelist.ms_name, ms_pricelist.ms_price 
    FROM records JOIN 
     ms_pricelist 
    WHERE records.CustomerNumber='1' AND ms_pricelist.ms_priceID='1' 

據我想要做什麼,但它增加了一個新的紀錄(編輯歷史:列)。我想將其更新或插入到我的記錄表中​​的現有記錄中。

編輯

我只是想更新將插入ms_name和ms_price的值(從ms_pricelist表)中的現有記錄TO SERVICE_TYPE和service_amount(記錄表)。

因此,在年底的記錄表將包含:

| customerID | service_type | service_amount | 
|------------|--------------|----------------| 
| 1000712 | Casing  | 17.0897  | <--Note: updated price 
| 1000712 | Trunion  | 189.9900  | 
| 1000712 | Fan   | 69.9902  | <--Note: new row 
+0

請標記與您正在使用的數據庫你的問題。如果這種格式不正確的語法被接受,那大概是MySQL。此外,樣本數據和期望的結果將有助於解釋你在做什麼。 'INSERT'不添加*列*,所以問題不清楚。 –

+0

我正在使用mysql。如果我使用UPDATE,它不能使它工作,它只是返回一堆錯誤。也許通過使用DUPLICATE或其他?我編輯了這個問題。 –

+0

是的,聽起來像ON DUPLICATE KEY UPDATE是你要找的。 只需確保表定義了PRIMARY KEY –

回答

1

你想要一個MERGE聲明(如果你有數據庫支持的話):

CREATE TABLE ms_pricelist (
    ms_priceID int, 
    ms_Name nvarchar(50), 
    ms_price money 
) 

CREATE TABLE records ( 
    customerID int, 
    service_type nvarchar(50), 
    service_amount money 
) 

MERGE records 
USING (
    SELECT 1000712 AS customerID, ms_name, ms_price 
    FROM ms_pricelist 
    wHERE ms_priceID = 7894 
    ) AS rows(CustomerID, Name, Price) 
ON records.service_type = rows.Name 
AND records.customerID = 1000712 
WHEN MATCHED THEN UPDATE 
    SET service_amount = rows.Price 
WHEN NOT MATCHED BY TARGET THEN INSERT(customerID, service_type, service_amount) 
    VALUES (rows.CustomerID, rows.Name, rows.Price); 

如果你的數據庫你正在使用的引擎沒有MERGE,那麼你必須以老式的方式來做;有獨立INSERTUPDATE

--Add any missing rows 
INSERT INTO records (customerID, service_type, service_amount) 
SELECT 1000712 AS CustomerID, ms_name, ms_price 
FROM ms_pricelist 
WHERE ms_priceID = 7894 
AND NOT EXISTS (
    SELECT * FROM records 
    WHERE records.service_type = ms_pricelist.ms_name 
    AND records.customerID = 1000712) 

--Update any existing rows 
UPDATE records 
SET service_amount = ms_pricelist.ms_price 
FROM records 
    INNER JOIN ms_pricelist 
    ON records.service_type = ms_pricelist.ms_name 
WHERE ms_pricelist.ms_priceID = 7894 
AND records.customerID = 1000712 

http://rextester.com/FEGQS79621

+0

#1064 - 你在你的SQL語法錯誤;檢查對應於您MariaDB的服務器版本正確的語法使用附近的手冊「FROM記錄 INNER JOIN ms_pricelist ON records.service_type = ms_pric」在行3.在更新返回此錯誤。 :( –

+0

我寫它針對SQL Server。你必須在適當轉化爲SQL的MySQL的變種。 –

相關問題