@tsOverflow Я обновил свое описание, вполне возможно, что в моей логике есть изъян.

аюсь выполнить запрос:

INSERT
  INTO `ProductState` (`ProductId`, `ChangedOn`, `State`)
SELECT t.`ProductId`, t.`ProcessedOn`, \'Activated\'
  FROM `tmpImport` t
  LEFT JOIN `Product` p
    ON t.`ProductId` = p.`Id`
 WHERE p.`Id` IS NULL
    ON DUPLICATE KEY UPDATE
       `ChangedOn` = VALUES(`ChangedOn`)

(Я не совсем уверен, что запрос правильный, но, похоже, он работает), однако я сталкиваюсь со следующей проблемой. Я выполняю этот запрос перед созданием записи в таблице «Продукты» и получаю проблему ограничения внешнего ключа из-за того, что записи еще нет в таблице «Продукты».

Мой вопрос заключается в том, есть ли способ выполнить этот запрос, но дождаться следующего запроса (который обновляет таблицу Product), прежде чем выполнять часть вставки запроса выше? Также следует отметить, что если запрос выполняется после создания записи Product, он больше не увидит p.Id как ноль и, следовательно, сбой, поэтому его необходимо выполнить до создания записи продукта.

---> Редактировать <--- Концепция, которую я пытаюсь реализовать, заключается в следующем: для начала я импортирую набор данных во временную таблицу,Product Таблица представляет собой список всех продуктов, которые (или были в прошлом) добавлены через набор данных из временной таблицы. Мне нужна отдельная таблица, в которой представлено изменение состояния продукта, поскольку иногда продукт становится недоступным (больше не в наборе данных, предоставленном поставщиком).

Таблица ProductState выглядит следующим образом:

CREATE  TABLE IF NOT EXISTS `ProductState` (
  `ProductId` VARCHAR(32) NOT NULL ,
  `ChangedOn` DATE NOT NULL ,
  `State` ENUM('Activated','Deactivated') NULL ,
  PRIMARY KEY (`ProductId`, `ChangedOn`) ,
  INDEX `fk_ProductState_Product` (`ProductId` ASC) ,
  CONSTRAINT `fk_ProductState_Product`
    FOREIGN KEY (`ProductId` )
    REFERENCES `Product` (`Id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

Внешний ключ является идентифицирующей связью с таблицей Product (Product.Id)

По сути, я пытаюсь сделать следующее: 1. Каждый раз, когда новый продукт (или ранее деактивированный продукт) обнаруживается в наборе данных поставщика, запись создается в таблице ProductState как «Активировано». 2. Каждый раз, когда продукт (который активирован) не отображается в наборе данных поставщика, запись создается как «Деактивированная» в таблице ProductState.

Цель таблицы ProductState - отслеживать состояния активации и деактивации продукта. Также ProductState является отношением Multi-To-One к Таблице продуктов, и состояние продукта будет меняться только один раз в день, поэтому мой PKEY будет ProductId и ChangedDate.

Ответы на вопрос(1)

Ваш ответ на вопрос