sql >> Base de Datos >  >> RDS >> Mysql

insertar mysql si no existe sin clave única

La consulta es exitosa (de lo contrario, mysql_query() no devolvería true ) pero no inserta ninguna fila. La única explicación para eso es que SELECT parte da como resultado un conjunto vacío. Eso es porque LEFT JOIN devuelve filas que existen en t1 pero no en t2 , pero la selección se realiza en NULL filas en t1 .

Esto debería funcionar:

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

También tenga en cuenta que mysql_query() es obsoleto. Y debe declarar las columnas que deben contener datos como NOT NULL , entonces NULL no será aceptado. Y su consulta será lenta, porque no está usando índices.