2017-02-06 4 views
0

Ich habe die folgenden Tabellen:Insert-Abfrage mit Update

Tabelle "Namen":

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

Tabelle "Unternehmen":

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

Tabelle "Tabelle1":

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 

Ich muss eine Einfügeabfrage machen, so dass Datensätze mit demselben c1 und c2 (wenn c2 nicht null ist) oder demselben c1 nur (wenn c2 gleich null ist) werden in Table2 eingefügt und die ID in Table2 aktualisiert, um die minimale ID von Table1 zu sein.

sollte das Ergebnis so aussehen:

Tabelle „Tabelle2“:

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

, wie ich aus dem Ergebnis beurteilen kann, müssen Sie nur Company ändern –

+0

CompanyID Ich glaube, Sie wollen Um eine Tabelle zu erstellen, in der Sie ausgewählte Abfrageergebnisse speichern möchten, was nicht wirklich eine gute Idee ist, stellen Sie einfach eine Abfrage bereit, wann immer sie benötigt wird. Aktualisieren einer ID ist in der Regel auch eine schlechte Idee, können Sie eine Integrität Ihrer Daten brechen. – Ruli

+0

@Ruli Es ist nur, dass ich alle Datensätze mit Mindest-ID eingefügt werden muss. – Sally

Antwort

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)) 
+0

ID ist auch anders .. was ist der Hauptfall. Ich brauche die minimale ID basierend auf c1 und c2 – Sally