sql >> Databasteknik >  >> RDS >> Mysql

mysql infoga om värdet inte finns i en annan tabell

Du måste använda någon typ av INSERT...SELECT fråga.

Uppdatering (efter förtydligande): Till exempel, här är hur du infogar en rad i t2 om en motsvarande rad inte redan finns i t1 :

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

För att infoga flera rader med samma fråga, är jag rädd att det inte finns något bättre än

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

Ursprungligt svar

Detta kommer till exempel att ta other_column från alla rader från table1 som uppfyller WHERE sats och infoga rader i table2 med värdena som används som column_name . Det kommer att ignorera dubbletter av nyckelfel.

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


  1. Grundläggande om tabelluttryck, del 3 – Härledda tabeller, optimeringsöverväganden

  2. Lägg till saknad data från föregående månad eller år kumulativt

  3. MySQL:KRÄV SSL visas inte i anslag

  4. Börjar med versionshantering av mysql-scheman utan överdrift. Bra lösningar?