Как получить ID для INSERT, если имя уже используется, иначе создать новое - PullRequest
0 голосов
/ 15 октября 2011

У меня небольшие проблемы с запросом INSERT. У меня есть таблица, в которую я вставляю значение, вот так:

TABLE cars

ID   Brand     Model   B_ID
---------------------------
1    Ford      Escort   1
2    Ford      Focus    1
3    Nissan    Micra    2
4    Renault   Megane   3
5    Ford      Mustang  1

Идентификатор уникален, а B_ID - один и тот же идентификатор для каждой марки.

При вставке новой записи я хочу иметь возможность проверить, присутствует ли там бренд, и использовать тот же B_ID, в противном случае я хочу увеличить максимальный B_ID и вставить его.

У меня так далеко:

INSERT INTO 'cars' ('brand', 'model', 'B_ID')
VALUES (
'Nissan'
'Note'
'SELECT B_ID FROM cars WHERE brand = 'Nissan'
 )

Как я могу получить самый высокий B_ID и увеличить его на единицу, если нет совпадений с моим подзапросом, потому что это новый бренд?

Я использую MySQL.

Ответы [ 2 ]

1 голос
/ 15 октября 2011
INSERT INTO `cars` (`brand`, `model`, `B_ID`)
select 'Nissan', 'Note', coalesce(Max(B_ID),0)+1 FROM cars WHERE brand = 'Nissan'
0 голосов
/ 15 октября 2011

Пока вы не нормализуете свои таблицы:

INSERT INTO cars
  (brand, model, B_ID)
SELECT 'Nissan'
     , 'Note'
     , COALESCE( ( SELECT B_ID 
                   FROM cars 
                   WHERE brand = 'Nissan'
                   LIMIT 1
                 )
               , ( SELECT MAX(B_ID) 
                   FROM cars 
                 ) + 1
               , 1               --- this is for the case when the table is empty
               )

Также обратите внимание, что если у вас есть несколько одновременных INSERT, вы можете закончить строками, которые имеют разные brand, но одинаковые B_ID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...