2011-07-28 63 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。我会为你提供每个样品。 –