Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql einfügen, falls nicht ohne eindeutigen Schlüssel vorhanden

Die Abfrage ist erfolgreich (ansonsten mysql_query() würde nicht true zurückgeben ), fügt jedoch keine Zeilen ein. Die einzige Erklärung dafür ist, dass SELECT Teil ergibt eine leere Menge. Das liegt am LEFT JOIN gibt Zeilen zurück, die in t1 vorhanden sind aber nicht in t2 , aber die Auswahl erfolgt auf NULL Zeilen in t1 .

Das sollte funktionieren:

INSERT teamshalf
(`yearID` , `lgID` , `teamID` , `Half` , 
`divID` , `DivWin` , `Rank` , `G` , `W` , `L`)
 SELECT DISTINCT t1.`yearID` , t1.`lgID` , t1.`teamID` ,
 t1.`Half` , t1.`divID` , t1.`DivWin` , t1.`Rank` , t1.`G` , t1.`W` , t1.`L` 
 FROM `teamshalf_TEMP` t1 LEFT JOIN `teamshalf` t2 ON t1.`yearID` = t2.`yearID`
 AND t1.`lgID` = t2.`lgID` AND t1.`teamID` = t2.`teamID`
 AND t1.`Half` = t2.`Half` AND t1.`divID` = t2.`divID`
 AND t1.`DivWin` = t2.`DivWin` AND t1.`Rank` = t2.`Rank`
 AND t1.`G` = t2.`G` AND t1.`W` = t2.`W` AND t1.`L` = t2.`L`
 WHERE t2.`yearID` IS NULL

Beachten Sie auch, dass mysql_query() ist veraltet. Und Sie sollten Spalten, die Daten enthalten müssen, als NOT NULL deklarieren , also NULL wird nicht akzeptiert. Und Ihre Abfrage wird langsam sein, weil Sie keine Indizes verwenden.