mysql - 错误代码 : 1093. 您无法在 FROM 子句中指定用于更新的目标表 'schedule'

标签 mysql sql sql-update

我正在尝试编写一个查询来更新schedule 表的外键invoice_id。

CREATE TABLE `invoices` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `invoice_date` date NOT NULL,
  `company_id` int(11) NOT NULL,
PRIMARY KEY (`id`))

CREATE TABLE `schedule` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `payment_date` date NOT NULL,
  `company_id` int(11) NOT NULL,
  `invoice_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  KEY `fk_company_id_idx` (`company_id`),
  KEY `fk_schedule_invoices_idx` (`invoices_id`),
  CONSTRAINT `fk_schedule_company` FOREIGN KEY (`company_id`) REFERENCES `company` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
  CONSTRAINT `fk_schedule_invoices` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION

UPDATE schedule
SET invoice_id=(SELECT id FROM invoices ORDER BY id DESC LIMIT 1)
WHERE (company_id=1 
AND (SELECT EXTRACT(MONTH FROM payment_date) as schedule_month FROM schedule WHERE company_id=1)=
(SELECT EXTRACT(MONTH FROM invoice_date) as invoice_month FROM invoices WHERE company_id=1))

但我收到错误代码:1093。您无法在 FROM 子句中指定更新的目标表“计划”。有其他方法可以根据月份和 company_id 更新 invoice_id 吗?

编辑: 实际上我想要实现的是创建一个触发器,在插入新发票后更新 schedule 表的invoice_id 字段。该更新应基于company_id、年份和月份(同一月的日期不同)。我只是尝试在不创建触发器的情况下进行更新

Here's a sample

最佳答案

正如我在帖子编辑中提到的,我需要设置 Schedule.invoice_id 值。我对SQL很陌生,所以一开始我写了一个错误的条件。感谢您的提示@Michael Berkowski

UPDATE schedule s
JOIN invoices i
ON s.company_id=i.company_id
SET s.invoice_id=i.id
WHERE month(s.payment_date)=month(i.invoice_date)

关于mysql - 错误代码 : 1093. 您无法在 FROM 子句中指定用于更新的目标表 'schedule',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531012/

相关文章:

mysql - 在加入它们之前在多个表上使用相同的 where 子句

mysql - 选择具有确切姓名和生日的所有客户

sql - 均匀间隔的多个平均值

从连接查询更新 Mysql

sql - 更新为最新日期

php - 如何使用php、mysql更新数据库

php - 最安全的LAMP加密方法

mysql重复数据删除

php - 在 mysql ORDER BY 中使用 case

mysql - 使用 ID 连接 3 个表