2015-03-13 3 views
-1

Я хочу использовать операторы SET x = IFNULL(expr1, expr2), где я пытаюсь выбрать id в expr1, и если он не существует, я хочу вставить новую строку в expr2 и вернуть последний вставленный id с SELECT LAST_INSERT_ID()Объединить два оператора с одним выражением в MySql

Как я могу достичь чего-то вроде SET x = IFNULL(SELECT id WHERE x = ..., (INSERT INTO ...; SELECT LAST_INSERT_ID()))? (Expr2 кажется неправильным синтаксисом)

+0

ли вы пытаетесь вставить строку в таблицу только в том случае, если она еще не существует? Если это так, вы делаете это неправильно. –

+0

Я начал играть с этим, но это действительно неясно, чего вы хотите. Если вы хотите уникальность, то заставьте MySQL закрепить его, создав индекс UNIQUE для уникальных столбцов. Если вы используете первичный ключ, тогда это будет делать. Если вы хотите 'LAST_INSERT_ID()', то столбец также должен быть установлен автоматически. Это очень похоже на проблему XY, поэтому отредактируйте свой квест, чтобы точно описать свой прецедент, и посмотрите, что вы получите. –

ответ

0

Если я вас правильно понимаю я думаю, что вы хотите сделать что-то вроде этого

DECLARE expr1 INT; 
DECLARE returnValue INT; 

SELECT id 
FROM where-your-want 
WHERE clause 
INTO expr1; 

IF expr1 IS NOT NULL THEN 
    SELECT what-ever-you-want 
    FROM where-you-want 
    WHERE clause 
    SET returnValue = -1; 
ELSE 
    INSERT INTO where-ever-you-want() 
    VALUES(); 
    SET returnValue = LAST_INSERT_ID(); 
END IF; 

SELECT returnValue; 

, конечно, весь этот код является частью хранимой процедуры ...

+0

именно то, что я искал :) Спасибо! – user3817420

+0

Добро пожаловать :) Я рад, что смог помочь ... –

Смежные вопросы