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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top