sql >> Databasteknik >  >> RDS >> Mysql

mysql infoga om det inte finns utan unik nyckel

Frågan lyckades (annars mysql_query() skulle inte returnera true ) men det infogar inte några rader. Den enda förklaringen till det är att SELECT del resulterar i en tom uppsättning. Det beror på att LEFT JOIN returnerar rader som finns i t1 men inte i t2 , men valet görs på NULL rader i t1 .

Detta borde fungera:

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

Observera också att mysql_query() är utfasad. Och du bör deklarera kolumner som måste innehålla data som NOT NULL , alltså NULL kommer inte att accepteras. Och din fråga kommer att vara långsam, eftersom du inte använder index.



  1. Hur man lägger till en ny kolumn i en befintlig tabell i SQL Server (T-SQL)

  2. CURRENT_TIME Exempel – MySQL

  3. MySQL -PHP infoga DATETIME

  4. Hur man infogar data i den kapslade uppsättningsmodellen (MySQL);