Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql insert se o valor não existir em outra tabela


Você precisa usar algum tipo de INSERT...SELECT inquerir.

Atualização (após esclarecimentos): Por exemplo, aqui está como inserir uma linha em t2 se uma linha correspondente ainda não existir em 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 inserir várias linhas com a mesma consulta, receio que não haja nada melhor do 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

Resposta original

Por exemplo, isso levará other_column de todas as linhas de table1 que satisfazem o WHERE cláusula e inserir linhas em table2 com os valores usados ​​como column_name . Ignorará erros de chave duplicados.
INSERT IGNORE INTO table2 (column_name)
  SELECT table1.other_column
  FROM table1 WHERE table1.something == 'filter';