sql >> Databáze >  >> RDS >> Mysql

mysql insert, pokud neexistuje bez jedinečného klíče

Dotaz je úspěšný (jinak mysql_query() nevrátí true ), přesto nevkládá žádné řádky. Jediným vysvětlením je, že SELECT část má za následek prázdnou množinu. Je to proto, že LEFT JOIN vrátí řádky, které existují v t1 ale ne v t2 , ale výběr se provádí na NULL řádků v t1 .

Mělo by to fungovat:

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

Všimněte si také, že mysql_query() je zastaralá. A sloupce, které musí obsahovat data, byste měli deklarovat jako NOT NULL , takže NULL nebudou přijaty. A váš dotaz bude pomalý, protože nepoužíváte indexy.



  1. Naplnění Teradata realistickými testovacími daty De Novo

  2. Proč není v PostgreSQL dostupné celé číslo bez znaménka?

  3. MYSQL Vyberte 5 záznamů pro posledních 5 odlišných záznamů

  4. ORA-24247:přístup k síti odepřen seznamem řízení přístupu (ACL)