Muchas veces necesitamos crear una entrada en una tabla sólo en el caso de que no exista ya. Por desgracia no existe una sintaxis de INSERT IF NOT EXISTS, como sí existe por ejemplo con CREATE. Os estaréis cagando en mi porque el título os dio esperanzas… Tranquilos, existe una simple alternativa, haciendo uso de SELECT FROM dual con una condición WHERE NOT EXISTS:
Veamos un ejemplo, y debajo lo explico. Vamos a insertar un pueblo en una tabla sólo si no ha sido insertado ya:
INSERT INTO poblaciones(Nombre) SELECT 'Bergantiños' FROM dual WHERE NOT EXISTS (SELECT Nombre FROM poblaciones WHERE Nombre = ‘Bergantiños’)LIMIT 1
Como veis usamos SELECT FROM dual, un nombre de tabla que se especifica en MySQL, Oracle o PostgreSQL como nombre de tabla falsa en asignaciones en las que no usamos tablas realmente. De esta forma podemos usar la condición WHERE NOT EXISTS para comprobar con una búsqueda que el campo no está en la tabla. En la búsqueda uso LIMIT 1 para que pare en cuanto encuentre un resultado y reducir la carga de trabajo.
(Editado, y gracias a infocat20, que me avisó de que tenía el limit mal colocado)
L
Me sirvio mucho tu ayuda. Saludos
Buena la solución, pero cuando lo hacía correr se me duplicaban, triplicaban, cuatriplicaban los registros exponensialmente, el error es que era que el limit debe estar fuera del parentesis. Gracias
El problema con esto es que si la tabla está vácia simplemente no pasa nada, es decir, no inserta nada