MySQL加入与Insert结合?

时间:2011-07-28 16:29:57

标签: mysql join insert

如果存在某些东西,是否可以从参考表中获得INSERT?

说这是插入一些数据的查询......

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

我有一个名为“Lookup”的查找表,其中包含两列。 “类型”和“数字”。我想要的是,如果在这个实例中“类型香肠”的“查找”表中存在某些内容,则从查找表中提取“数字”字段,而不是在INSERT语句中插入6。

enter image description here

希望很清楚!

1 个答案:

答案 0 :(得分: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