使用Update插入查询

时间:2017-02-06 09:33:39

标签: mysql

我有以下表格:

表“名称”:

ID     |   Name
---    |   ---
123    |  John
164    |  Peter
346    |  Mark
679    |  Bob

表“公司”:

ID     |   Company
---    |   ---
111    |   XXX
666    |   YYY
777    |   ZZZ

表“表1”:

ID     |   c1    |    c2    |    NameID    |    CompanyName
---    |   ---   |    ---   |    ------    |    -----------
1254   |    1    |     A    |     123      |       XXX
1548   |    1    |     A    |     123      |       YYY
2649   |    1    |     A    |     123      |       ZZZ
2687   |    3    |     B    |     164      |       ZZZ
2699   |    1    |     A    |     164      |       YYY
2700   |    4    |  (NULL)  |     346      |       XXX
2711   |    4    |  (NULL)  |     346      |       YYY
2900   |    4    |     A    |     679      |       YYY

我需要进行插入查询,以便将具有相同c1和c2(如果c2不为空)或仅相同c1(如果c2为空)的记录插入到Table2中,并将Table2中的ID更新为最小ID表1

结果应该是这样的:

表“表2”:

ID     |   c1    |    c2    |    NameID    |    CompanyID
---    |   ---   |    ---   |    ------    |    -----------
1254   |    1    |     A    |     123      |       111
1254   |    1    |     A    |     123      |       666
1254   |    1    |     A    |     123      |       777
2687   |    3    |     B    |     164      |       777
2687   |    1    |     A    |     164      |       666
2700   |    4    |  (NULL)  |     346      |       111
2700   |    4    |  (NULL)  |     346      |       666
2900   |    4    |     A    |     679      |       666

1 个答案:

答案 0 :(得分:0)

INSERT INTO Table2(ID, c1, c2, NameId, CompanyId)
SELECT 
    minTable.ID AS ID, 
    t1.c1 AS c1, 
    t1.c2 AS c2,
    t1.NameId AS NameId,
    c.ID AS CompanyId
FROM Table1 t1
JOIN Companies c ON t1.CompanyName = c.Company
JOIN (
    SELECT 
        MIN(t1.ID) AS ID, 
        t1.c1 AS c1, 
        t1.c2 AS c2
    FROM   Table1 t1
    JOIN Companies c ON t1.CompanyName = c.Company
    GROUP BY c1, c2
) minTable ON t1.c1 = minTable.c1 AND (t1.c2 = minTable.c2 OR (t1.c2 IS NULL AND minTable.c2 IS NULL))