2012-04-13 12 views
1

Wenn ich eine Tabelle mit Daten wie dieses:Prüfwert verschiedene andere Spalten Daten ignorieren

Col1 | Col2 | Col3 

    111 | a  | 

    222 | b  | 1 

    111 |  | 

Und ich wünsche nur aus meiner temporären Tabelle Distinct Col1 wählen dann Einfügen in ein anderes table.But mit der obigen Tabelle , die zweite "111" wird ebenfalls ausgewählt, da sie unterschiedliche Col2-Daten aufweist.

Oder wenn ich Distinct Col1 nur wählen, die anderen Spalten Daten werden ignoriert ...

So ist es eine Möglichkeit, dieses Problem zu lösen? Ich möchte nur die erste eingefügte Zeile mit denselben Col1-Daten auswählen.

Ich bin mit dieser Abfrage:

mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT DISTINCT Col1,Col2,Col3 FROM TempTable"); 

Vielen Dank für jede Antwort.

PS: Ich bin mir nicht sicher, wie man den Titel entsprechend meiner Frage spezifiziert ... vielleicht kann mir jemand helfen.

+0

Wie bestimmen Sie, dass "111" das neueste ist? – Vikram

+0

@Vikram Vielen Dank für Ihre Antwort. Verwenden Sie die älteste ID, die ersten eingefügten Daten. –

Antwort

1

Zuerst müssen Sie zuletzt ID pro eindeutigen Wert von col1 bestimmen, und Sie dann Reihen wählen Sie diese ID enthalten:

INSERT DELAYED INTO Tableb (Col1,Col2,Col3) 
SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3 
from TempTable 
inner join 
(
    select Col1, max(ID) ID 
    from TempTable 
    group by Col1 
) c 
ON TempTable.ID = c.ID 

innere Abfrage gibt IDs eingefügt werden, so dass man einfach schließt sich ihnen an Original-Tabelle filtere die Tabelle.

Ersetze max (id) mit min (id), wenn der erste TempTable-Datensatz eingefügt werden soll.

+0

Danke für Ihre Antwort und es funktioniert perfekt, danke für Ihre Hilfe. –

2

Vielleicht so etwas wie dies (das ist wahrscheinlich das, was Sie wollen):

INSERT INTO Tableb 
(
    Col1,Col2,Col3 
) 
SELECT 
    t.Col1, 
    MAX(t.Col2) AS Col2, 
    MAX(t.Col3) AS Col3 
FROM 
    TempTable as t 
GROUP BY 
    t.Col1 

Oder wenn Sie den MIN-Wert soll. Wie folgt aus:

INSERT INTO Tableb 
(
    Col1,Col2,Col3 
) 
SELECT 
    t.Col1, 
    MIN(t.Col2) AS Col2, 
    MIN(t.Col3) AS Col3 
FROM 
    TempTable as t 
GROUP BY 
    t.Col1 
+0

Danke für deine Antwort, ich versuche es jetzt. Kann ich wissen, wofür das "t" ist? wie t.Col1, t.Col2..it zeigt mir "unbekannte Spalte t.xxx". –

+0

Entschuldigung. Die Antwort wurde aktualisiert – Arion

+0

Danke für Ihre Aktualisierung. Ich habe es versucht, aber es scheint, ich habe ein kleines Problem, nicht sicher, was das Problem ist, aber ich werde es noch einmal untersuchen, vielen Dank für Ihre Hilfe, Ihre Antwort geben mir ein sehr gutes Konzept. –

0
mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1, MAX(t.Col2) AS Col2, MAX(t.Col3) AS Col3 FROM TempTable GROUP BY Col1"); 
+0

Danke für Ihre Antwort. –

0
INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here] 

Heißt das, es zu tun?

+0

Danke für Ihre Antwort. –

Verwandte Themen