Mysql
 sql >> Base de données >  >> RDS >> Mysql

insert mysql si la valeur n'existe pas dans une autre table

Vous devez utiliser un type de INSERT...SELECT requête.

Mise à jour (après clarification) : Par exemple, voici comment insérer une ligne dans t2 si une ligne correspondante n'existe pas déjà dans 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

Pour insérer plusieurs lignes avec la même requête, je crains qu'il n'y ait rien de mieux que

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

Réponse originale

Par exemple, cela prendra other_column de toutes les lignes de table1 qui satisfont le WHERE clause et insérer des lignes dans table2 avec les valeurs utilisées comme column_name . Il ignorera les erreurs de clé en double.

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