SQL INSERT IGNORE: пропустить значения в особом случае - PullRequest
0 голосов
/ 17 августа 2010

Я пытаюсь пропустить INSERT в конкретном случае, когда одно из двух задействованных значений является конкретным значением:

// 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

как мне избежать вставки имени дерева, если col_type == 1?

Я знаю, что могу создать уникальный ключ для col_wood_name и col_type, используя что-то вроде:

ALTER TABLE my_table ADD UNIQUE(col_wood_name, col_type);

но это неполно, потому что это должно работать, только если col_type равно 1, как я могу это решить?

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

AFAIK, нет способа сделать это в одном запросе.Используйте хранимые процедуры или дополнительный запрос в вашем приложении.

0 голосов
/ 17 августа 2010

Сколько разных типов col_type возможно?

Я спрашиваю по причинам дизайна.Если у вас есть только два столбца в таблице, я не вижу, как было бы полезно не устанавливать уникальное ограничение для двух полей.

...