SQL INSERT IGNORE: skip valori in un caso speciale
Domanda
sto cercando di saltare un INSERT
in un caso particolare, in cui uno dei due valori in questione è un valore specifico:
// 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
Come posso evitare di inserire un nome dell'albero, se col_type
== 1?
So di poter creare la chiave unica su col_wood_name
e col_type
usando qualcosa come:
ALTER TABLE my_table ADD UNIQUE(col_wood_name, col_type);
, ma questo è incompleta perché questo dovrebbe funzionare solo se è col_type
1
, come posso risolverlo?
Soluzione
Per quanto ne sappia, non c'è modo di farlo in una query. Utilizzare stored procedure o una query aggiuntiva nell'applicazione.
Altri suggerimenti
Come molti diversi col_type sono possibili?
Chiedo a causa di motivi di design. Se avete solo due colonne della tabella, non sto vedendo come sarebbe stato utile non fare il vincolo univoco sui due campi.