SQL INSERT IGNORE: пропустить значения в специальном корпусе

StackOverflow https://stackoverflow.com/questions/3505280

  •  29-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь пропустить 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 возможно?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top