我有以下表格:
表“名称”:
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
答案 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))