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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top