开发者

How to get ID for INSERT if name already used, else generate new one

I'm having a bit of trouble with an INSERT query. I have a table I'm inserting a value into that's like this:

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

ID is unique and B_ID is the same ID for every same brand.

When inserting a new entry I want to be able to check if a brand is already in there and use that same B_ID otherwise I want to increment the highest B_ID and insert that.

I've got this far:

INSERT INTO 'cars' ('brand', 'model', 'B_ID')
VALUES (
'Nissan'
'Note'
'SELECT B_ID FROM car开发者_JAVA百科s WHERE brand = 'Nissan'
 )

How can I get the highest B_ID and increment it by one if there is no match with my subquery because it's a new brand?

I'm using MySQL.


INSERT INTO `cars` (`brand`, `model`, `B_ID`)
select 'Nissan', 'Note', coalesce(Max(B_ID),0)+1 FROM cars WHERE brand = 'Nissan'


Until you normalize your tables:

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
               )

Also notice that if you have multiple concurrent INSERT, you may end with rows that have different brand but same B_ID.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜