SQL INSERT IGNORE: пропустить значения в специальном корпусе
Вопрос
Я пытаюсь пропустить 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
, Как я могу решить это?
Решение
Афайк, нет способа сделать это в одном запросе. Используйте хранимые процедуры или дополнительный запрос в вашем приложении.
Другие советы
Сколько разных Col_Type возможно?
Я спрашиваю из-за разработки причин. Если у вас есть только два столбца в таблице, я не вижу, как было бы полезно не делать уникальные ограничения на два поля.