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

mysql vložte, pokud hodnota neexistuje v jiné tabulce

Musíte použít nějaký typ INSERT...SELECT dotaz.

Aktualizace (po upřesnění): Zde je například uvedeno, jak vložit řádek do t2 pokud odpovídající řádek v t1 již neexistuje :

INSERT INTO t2 (v)
  SELECT temp.candidate
  FROM (SELECT 'test' AS candidate) temp
  LEFT JOIN t1 ON t1.v = temp.candidate
  WHERE t1.v IS NULL

Obávám se, že pro vložení více řádků se stejným dotazem „není nic lepšího než

INSERT INTO t2 (v)
  SELECT temp.candidate
  FROM (
      SELECT 'test1' AS candidate
      UNION SELECT 'test2'
      UNION SELECT 'test3' -- etc
  ) temp
  LEFT JOIN t1 ON t1.v = temp.candidate
  WHERE t1.v IS NULL

Původní odpověď

Například to bude trvat other_column ze všech řádků z table1 které splňují WHERE klauzuli a vložte řádky do table2 s hodnotami použitými jako column_name . Bude ignorovat chyby duplicitního klíče.

INSERT IGNORE INTO table2 (column_name)
  SELECT table1.other_column
  FROM table1 WHERE table1.something == 'filter';


  1. AKTUALIZOVÁNO:Chyba způsobuje, že Microsoft Office 365 Build 2105 přerušuje přístupové aplikace

  2. PostgreSQL dědičnost s JPA, Hibernate

  3. Použití pg_dump k získání příkazů vložení pouze z jedné tabulky v databázi

  4. Poskytovatel OraOLEDB.Oracle není registrován na místním počítači