SQL INSERT IGNORE: omitir valores en un caso especial
Pregunta
Estoy tratando de saltar un INSERT
en un caso particular, cuando uno de los dos valores en cuestión es un valor específico:
// this can work if Beech allready exists
INSERT IGNORE INTO my_table (col_wood_name, col_type)
VALUES ("Beech", 0)
// this should be skipped if Beech allready exists with col_type = 1
INSERT IGNORE INTO my_table (col_wood_name, col_type)
VALUES ("Beech", 1)
my_table:
id col_wood_name col_type other_column_1 other_column_2 etc_cols
1 Beech 0 ... ... ...
2 Fir 0 ... ... ...
3 Beech 1 ... ... ...
4 Pine 1 ... ... ...
5 Beech 1 // here is my problem, how can I avoid to insert a tree if col_type == 1?
6 Beech 0 // it's ok because col_type == 0
¿Cómo puedo evitar que inserte un nombre de árbol si col_type
== 1?
Sé que puedo crear la clave única en col_wood_name
y col_type
usando algo como:
ALTER TABLE my_table ADD UNIQUE(col_wood_name, col_type);
pero esto es incompleta porque esto debería funcionar sólo si es col_type
1
, ¿cómo puedo solucionarlo?
Solución
Que yo sepa, no hay forma de hacer que en una consulta. Utilizar procedimientos almacenados o una consulta adicional en su aplicación.
Otros consejos
¿Cuántas tipo_col diferentes son posibles?
te pido por razones de diseño. Si sólo tiene dos columnas en la tabla, no veo cómo sería beneficioso no hacer la restricción única en los dos campos.