2016-03-02 5 views
0

Я изучаю MySQL, поэтому я немного новичок во всем этом, но в последний раз, когда я спросил вас, вы оказались очень полезными, поэтому, возможно, вы можете помоги мне снова, потому что я не смог найти ответ самостоятельно.[MySQL] Вставить значение в зависимости от состояния

Итак, дело в том, что мне нужно добавить новый столбец в уже существующую таблицу, и она должна быть:

ALTER TABLE `medicos` 
ADD COLUMN `tipo_medico` VARCHAR(20) NOT NULL DEFAULT 'indiferente' AFTER `sueldo`; 

Теперь я должен выполнить инструкцию INSERT, чтобы добавить данные там. После добавления этого столбца, таблица выглядит следующим образом:

enter image description here

Эти значения равны: Medic_number, фамилиях, специальность, День рождения, университет, заработной платы и Medic_type (новую колонку я добавил). Данные, которые я добавляю во всех столбцах, кроме последнего, не имеют большого значения, но последний столбец должен быть заполнен после следующих условий:

-По умолчанию он будет «indiferente» (это работает).

-Если медик учился в университете, заканчивающемся на -а (например, в Валенсии), он скажет «Отлично».

-Если медик в возрасте 40 лет и старше, он скажет «Эксперт».

Теперь я знаю, как выполнять эти условия («... university like = '% a» и т. Д.), Но я не знаю, как добавить это в инструкцию INSERT. Это то, что я получил до сих пор:

insert into medicos values ('A021', 'Apellidos :D', 'Loquesealogia', '1970-03-14', 'Valencia', '3500'); 

Это добавляет все, кроме последнего столбца, который является тот, где я потерял. Что я могу сделать, чтобы сообщить инструкции INSERT, в зависимости от того, какое из ранее названных условий истинно, добавить одно значение или другое?

Надеюсь, я был достаточно ясен, я не являюсь носителем английского языка, поэтому мне жаль, если это было недостаточно. Также я попытался отформатировать коды на этот раз, надеюсь, что это сработает.

Спасибо.

+0

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

+0

Вы считали, что вместо этого используете 'view'? Что делать, если данные обновляются? Тогда вы можете просто использовать инструкцию 'case' при выборе данных. – sgeddes

+0

Нет, к сожалению, нет, я немного смущен этим упражнением, в частности, но я дам это некоторое пространство в своем мозгу, спасибо. – Regnum

ответ

1

Это похоже на случай, когда нам нужно применить логику значений столбцов до того, как будет вставлена ​​запись. Я бы предложил создать BEFORE INSERT trigger в этой таблице, который будет автоматически выполнен MySql перед вставкой каждой записи.

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

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

+0

Хм, я не думаю, что мы еще изучили это. Это оставляет меня в замешательстве, может быть, я зашел слишком далеко с вещами, которые я пытаюсь? лол. Это кажется довольно удобным, поэтому я попробую :) Спасибо! – Regnum

1

Я бы посоветовал вам сделать это либо с помощью триггера ДО НАЧАЛА ВСТАВКИ, как рекомендует Даршан Мехта, либо выполняет свою логику на стороне программирования, либо с помощью хранимой процедуры.

Тем не менее это выполнимо во время запроса, поэтому ответить на ваш вопрос конкретно, попробовать что-то вроде этого:

INSERT INTO medicos (num_colegiado, apellidos, especialidad, fecha_nac, universidad, sueldo, tipo_medico) SELECT 'A021', 'Apellidos :D', 'Loquesealogia', '1970-03-14', 'Valencia', '3500', IF('Loquesealogia' like '%a','Excellent',IF(DATE_ADD('1970-03-14', interval 40 YEAR)>NOW(),'Expert','indiferente')) 
+0

Ничего себе, это действительно полезно, спасибо вам большое! Проблема в том, что она дает мне ошибку 1064, и я не могу найти, какая часть инструкции неверна, хотя это похоже на часть YEAR)> NOW(), но я не уверен. – Regnum

+1

О, это была опечатка, я написал DATEADD вместо DATE_ADD, запрос исправлен, попробуйте сейчас. – Jinxmcg

+0

Нет, к сожалению, я не могу заставить его работать. Я исправил опечатку (спасибо!), И она добавляет новый медик, которого я хочу, но колонка, которая должна измениться, не делает этого. Он остается как «indiferente», независимо от того, насколько старый врач или где он учился. Я пойду спать сейчас, но спасибо большое за вашу помощь, это, безусловно, будет удобно, я постараюсь заставить его работать завтра. – Regnum

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