Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток, имеется проблема с созданием триггера, есть 2 таблички
CREATE TABLE IF NOT EXISTS `vendor` (
`vendor_name` CHAR(50),
`vendor_address` CHAR(80),
PRIMARY KEY(`vendor_name`)
) CHARACTER SET=UTF8 ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `property` (
`p_id` INT NOT NULL,
`name` CHAR(80),
`vendor_name` CHAR(50),
`color` CHAR(30),
PRIMARY KEY(`p_id`),
FOREIGN KEY (vendor_name) REFERENCES vendor(vendor_name) ON DELETE CASCADE
) CHARACTER SET=UTF8 ENGINE=InnoDB;
с некоторыми данными соответсвенно Производители и Свойства товара
необходимо отсекать товары произведенный в, допустим, "СПб" при вводе товара в таблицу Свойства товара
Следующая конструкция работает только если в таблице Производитель только один из СПб, т.к. в ином случае выдается 2 строчки, что уже нельзя сопоставить с конкретным значением. Конкретный вопрос состоит в том, как сопоставить только что введенное значение имени произв. в таблице Свойства товара со значением имени произв. в таблице Производитель
DELIMITER $$
CREATE TRIGGER p_ins
BEFORE INSERT ON property FOR EACH ROW
BEGIN
IF NEW.vendor_name = (SELECT vendor.vendor_name FROM vendor WHERE vendor.vendor_address = 'Saint-Petersburg')
THEN
insert into `Saint-Petersburg` values(5);
END IF;
END
заранее спасибо.
P.S. "insert into `Saint-Petersburg` values(5);" таблицы `Saint-Petersburg` не существет, это для отмены создания
Отредактированно Gil (31.01.2012 15:31:44)
Неактивен
Gil написал:
Следующая конструкция работает только если в таблице Производитель только один из СПб, т.к. в ином случае выдается 2 строчки, что уже нельзя сопоставить с конкретным значением.
А разве такая ситуация не приводит к ошибке (что вам и требуется)?
Неактивен
vasya написал:
Gil написал:
Следующая конструкция работает только если в таблице Производитель только один из СПб, т.к. в ином случае выдается 2 строчки, что уже нельзя сопоставить с конкретным значением.
А разве такая ситуация не приводит к ошибке (что вам и требуется)?
Да, но если допустим в таблице свойств уже есть товар, который произведен в СПб, с двумя строчками производителя СПб не добавляются никакие значения, т.к. сразу же выводится ошибка - Subquery returns more than 1 row
Отредактированно Gil (31.01.2012 17:14:03)
Неактивен
И что? Вы хотите также удалить и ранее введенные товары?
Неактивен
vasya написал:
И что? Вы хотите также удалить и ранее введенные товары?
Нет, чтобы независимо от количества производителей СПб можно было вводить другие товары. Триггер работает, если только в списке 1 производитель из СПб, в ином случае не добавляются никакие товары.
Отредактированно Gil (31.01.2012 17:17:25)
Неактивен
SELECT vendor.vendor_name FROM vendor WHERE vendor.vendor_address = 'Saint-Petersburg' limit 1
Неактивен
Спасибо, проблема решена, сработала конструкция
IF NEW.vendor_name IN (SELECT vendor.vendor_name FROM vendor WHERE vendor.vendor_address = 'Saint-Petersburg')
Неактивен