sql >> Base de Datos >  >> RDS >> Mysql

mysql insertar si el valor no existe en otra tabla

Debe usar algún tipo de INSERT...SELECT consulta.

Actualización (después de la aclaración): Por ejemplo, aquí se explica cómo insertar una fila en t2 si una fila correspondiente no existe ya en 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

Para insertar varias filas con la misma consulta, me temo que no hay nada mejor 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

Respuesta original

Por ejemplo, esto tomará other_column de todas las filas de table1 que satisfacen el WHERE cláusula e insertar filas en table2 con los valores utilizados como column_name . Ignorará los errores de clave duplicada.

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