2017-03-12 18 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' 

それは私が何をしたいんが、新しい記録(編集履歴:列)を追加します。レコードテーブルの既存のレコードにUPDATEまたはINSERTする必要があります。

EDIT

私はちょうどSERVICE_TYPEとservice_amount(記録表)から(ms_pricelist表から)ms_nameとms_priceの値を挿入する既存のレコードを更新します。

テーブルが含まれます最終的にレコードのようにするには:(あなたが持っているデータベースがサポートしている場合)あなたはMERGE声明をしたい

| 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'は* column *を追加しないので、質問は不明です。 –

+0

私はmysqlを使用しています。私はUPDATEを使用してもうまく動作せず、エラーの束を返します。多分DUPLICATEか何かを使って?私はその質問を編集した。 –

+0

はい、ON DUPLICATE KEY UPDATEのようなサウンドはあなたが探しているものです。 テーブルにPRIMARY KEYが定義されていることを確認してください –

答えて

1

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 records INNER JOIN ms_pricelist ON records.service_type = ms_pric'を3行目に置きます。 :( –

+0

私はそれをSQL Serverに対して書いていましたが、適切な場合にはmysqlのSQLの変種に翻訳する必要があります。 –

関連する問題