2017-03-12 29 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的变种。 –

相关问题