Мой вопрос говорит о том, что он хочет, чтобы я добавил ограничение, чтобы компания не могла больше покупать автомобили, выпущенные до 2018 года. Проблема в том, что в моей базе данных уже есть информация об автомобилях, выпущенных до 2018 года. Я не могу удалить таблицу, потому что она будет возиться с некоторыми из моих других запросов. Могу я получить совет по этому поводу?
Мой код ниже для таблицы транспортных средств
create table Vehicle(
LicensePlate varchar(48) primary key, /*Primary key for table Vehicle for License plate, variable can hold up to 48 characters*/
Make varchar (48),
CarYear int
);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1234 AA','Toyota',1970);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1237 AB','Mazda',1995);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1892 BG','Toyota',2000);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1876 FA','Nissan',1999);
insert into Vehicle (LicensePlate,Make,CarYear) values ('3021 AA','Mazda',1950);
insert into Vehicle (LicensePlate,Make,CarYear) values ('2134 FF','Toyota',1992);
-- Company has decided not to purchase any more car that were made before 2018. Add appropriate constraints to the Vehicle table to enforce this requirement.
alter table Vehicle add constraint checker_1 check (CarYear > 2018);
Вы хотите проверить текущие данные таблицы или хотите проверить при вставке новых данных в таблицу?
я считаю, что это должно быть для проверки текущих данных, которые находятся в таблице.
Если так, вы не можете добавить constraint
в таблицу. Я предполагаю, что вы все еще используете данные, где CarYear < 2018
, верно? Как насчет проверки в запросе?
да, я все еще использую его в других запросах, поэтому я не могу удалить или изменить данные, как мне проверить это в запросе? Я еще немного новичок. не могу ли я применить его или это не сработает?
В запросе вы просто добавляете WHERE CarYear > 2018
, но если вам нужно показать все автомобили и в то же время определить, какие автомобили CarYear > 2018
, вы можете добавить CASE
в SELECT
как CASE WHEN CarYear > 2018 THEN 1 ELSE 0 END AS car_year_chk
в качестве другого столбца.
Так ты имеешь в виду, что с этим можно работать? Или есть проблема с результатом, который он возвращает? Может быть, вы можете опубликовать ожидаемые результаты.
это то, с чем я могу работать, большое спасибо за вашу помощь до сих пор.
Попробуйте этот запрос, если это возможно для вашей операции:
SELECT LicensePlate, Make, CarYear,
CASE WHEN CarYear > 2018 THEN 1 ELSE 0 END AS car_year_chk
FROM Vehicle;
На ваших текущих демонстрационных данных вы получите следующий результат:
Демонстрационная рабочий пример
Буду ли я проверять это как запрос, чтобы обеспечить соблюдение правила - больше не покупать автомобили, выпущенные до 2018 года?
Где это происходит? В веб-приложении? Думаю, если вы действительно хотите сделать что-то подобное, просто ограничьте результаты/вывод только автомобилями, выпущенными после 2018 года, напрямую используя WHERE CarYear > 2018
. Если вы все еще хотите показать их все и отключить выбор автомобиля через веб-приложение (интерфейс), это другая программа / процесс, и я предлагаю вам опубликовать новый вопрос.
Пожалуйста, покажите нам структуру таблицы
vehicle
. Может быть, можно использовать другую колонку для идентификации недавно добавленных автомобилей?