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

mysql indsæt, hvis værdi ikke findes i en anden tabel

Du skal bruge en form for INSERT...SELECT forespørgsel.

Opdatering (efter afklaring): For eksempel, her er, hvordan du indsætter en række i t2 hvis en tilsvarende række ikke allerede findes 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

For at indsætte flere rækker med den samme forespørgsel, er jeg bange for, at der ikke er noget bedre end

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

Oprindeligt svar

For eksempel vil dette tage other_column fra alle rækker fra table1 der opfylder WHERE klausul og indsæt rækker i table2 med værdierne brugt som column_name . Det vil ignorere duplikerede nøglefejl.

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


  1. Opret tabel i procedure

  2. MySQL Indlæs datafil

  3. Ændre dette fra MySQL til MySQLi?

  4. Hvordan forhindrer man overskridelse af max_user_connections ved genindlæsning/opdatering af siden flere gange?