sql >> Database >  >> RDS >> Mysql

mysql invoegen indien niet aanwezig zonder unieke sleutel

De query is succesvol (anders mysql_query() zou true niet retourneren ) maar er worden geen rijen ingevoegd. De enige verklaring daarvoor is dat de SELECT deel resulteert in een lege set. Dat komt omdat de LEFT JOIN retourneert rijen die bestaan ​​in t1 maar niet in t2 , maar de selectie gebeurt op NULL rijen in t1 .

Dit zou moeten werken:

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

Merk ook op dat mysql_query() wordt afgeraden. En u moet kolommen die gegevens moeten bevatten declareren als NOT NULL , dus NULL zal niet worden geaccepteerd. En uw zoekopdracht zal traag zijn, omdat u geen indexen gebruikt.



  1. Grote objecten mogen niet worden gebruikt in de modus voor automatisch vastleggen

  2. Tabel [tabelnaam] is niet vergrendeld

  3. Hoe twee dubbele kolommen te verwijderen

  4. MySQL GroupBy en toont het horizontaal