2011-07-28 114 views
5

如果某個參考表中存在某個INSERT,是否可以有一個INSERT?MySQL加入插入組合?

之所以這樣說,是要插入一些數據的查詢......

INSERT INTO `Test`.`Items` (
`Name` , 
`Type` , 
`Number` 
) 
VALUES (
'Pork', 'Sausage', 6 
); 

而且我有一個名爲包含兩列「查找」查找表。 「類型」和「數字」。我想要的是,如果在這個實例的「查找」表中存在類型香腸,那麼從查找表中拉入「數字」字段而不是在INSERT語句中插入6。

enter image description here

希望是明確的!

回答

7
INSERT INTO Test.Items 
    (Name, Type, Number) 
    SELECT 'Pork', 'Sausage', COALESCE(l.Number, 6) 
     FROM Lookup l 
     WHERE l.Type = 'Sausage' 

編輯:基於下面的評論附加樣本。

使用UNION ALL串插入一塊:

INSERT INTO Test.Items 
    (Name, Type, Number) 
    SELECT 'Pork', 'Sausage', COALESCE(l.Number, 6) 
     FROM Lookup l 
     WHERE l.Type = 'Sausage' 
    UNION ALL 
    SELECT 'Halibut', 'Fish', COALESCE(l.Number, 7) 
     FROM Lookup l 
     WHERE l.Type = 'Fish' 

使用臨時表:

CREATE TEMPORARY TABLE tmpItems (
    Name VARCHAR(255), 
    Type VARCHAR(255), 
    Number INT 
) 

INSERT INTO tmpItems 
    (Name, Type, Number) 
    VALUES ('Pork', 'Sausage', 6) 
INSERT INTO tmpItems 
    (Name, Type, Number) 
    VALUES ('Halibut', 'Fish', 7) 

INSERT INTO Test.Items 
    (Name, Type, Number) 
    SELECT t.Name, t.Type, COALESCE(l.Number, t.Number) 
     FROM tmpItems t 
      LEFT JOIN Lookup l 
       ON t.Type = l.Type 
+0

這是輝煌的,從來沒有見過COALESCE命令要麼,很不錯! –

+0

如果我想要多個查找表表示另一個值,我將如何構造它?因此,另一個表Lookup2例如我(使用這個例子)查找名稱 –

+1

@Lee:有幾種方法。您可以將SELECT語句與UNION ALL運算符串聯在一起,或者,如果您有足夠多的要插入的值,則可能需要使用所有值填充臨時表,然後針對查找進行JOIN。我會爲你提供每個樣品。 –