sql >> Database teknologi >  >> RDS >> Mysql

mysql indsæt hvis ikke eksisterer uden unik nøgle

Forespørgslen er vellykket (ellers mysql_query() ville ikke returnere true ) men den indsætter ikke nogen rækker. Den eneste forklaring på det er, at SELECT del resulterer i et tomt sæt. Det er fordi LEFT JOIN returnerer rækker, der findes i t1 men ikke i t2 , men valget udføres på NULL rækker i t1 .

Dette burde virke:

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

Bemærk også, at mysql_query() er forældet. Og du bør erklære kolonner, der skal indeholde data, som NOT NULL , så NULL vil ikke blive accepteret. Og din forespørgsel vil være langsom, fordi du ikke bruger indekser.



  1. Hvordan SUMMER og TRÆKKER man ved hjælp af SQL?

  2. Sådan forberedes sætninger og bindeparametre i Postgresql til C++

  3. Svarende til Oracles RowID i MySQL

  4. MySQL GROUP BY/ORDER BY problem