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

Inserir onde não existe - sem chave primária

Se você realmente deseja escrever sua própria consulta (de trabalho).

INSERT INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) SELECT 
    '$_POST[id]'  f_dent_id, 
    '$groupid'    f_group_id,
    '$scheduleid' f_schedule_id
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1
  FROM `groupdentlink`
  WHERE 
    f_dent_id = '$_POST[id]' AND f_group_id = '$groupid'
  LIMIT 1 -- will stop mysql to stop searching after first match
)

... mas o MySQL pode lidar com tudo isso para você!


Você não precisa de chaves primárias para fazer o MySQL lidar com isso para você, você deve adicionar um UNIQUE restrição de chave no conjunto combinado das duas colunas.

Consulta para adicionar a chave exclusiva dent_group_uniq_key para groupdentlink .
ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
  f_dent_id, f_group_id
);

Em seguida, use INSERT IGNORE na sua consulta:
INSERT IGNORE INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) VALUES (
  '$_POST[id]', '$groupid', '$scheduleid'
)

INSERT IGNORE tentará inserir uma linha na sua tabela, se falhar devido a uma restrição de chave, agirá como se nada acontecesse.