标签: mysql-error-1093

MySQL错误1093 - 无法在FROM子句中指定更新的目标表

story_category我的数据库中有一个表有损坏的条目.下一个查询返回损坏的条目:

SELECT * 
FROM  story_category 
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category INNER JOIN 
       story_category ON category_id=category.id);
Run Code Online (Sandbox Code Playgroud)

我试图删除它们执行:

DELETE FROM story_category 
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category 
      INNER JOIN story_category ON category_id=category.id);
Run Code Online (Sandbox Code Playgroud)

但我得到了下一个错误:

#1093 - 您无法在FROM子句中为更新指定目标表'story_category'

我怎么能克服这个?

mysql subquery mysql-error-1093 sql-delete

556
推荐指数
10
解决办法
42万
查看次数

您无法在FROM子句中指定要更新的目标表

我有一个简单的mysql表:

CREATE TABLE IF NOT EXISTS `pers` (
  `persID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(35) NOT NULL,
  `gehalt` int(11) NOT NULL,
  `chefID` int(11) DEFAULT NULL,
  PRIMARY KEY (`persID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `pers` (`persID`, `name`, `gehalt`, `chefID`) VALUES
(1, 'blb', 1000, 3),
(2, 'as', 1000, 3),
(3, 'chef', 1040, NULL);
Run Code Online (Sandbox Code Playgroud)

我试图运行以下更新,但我只得到错误1093:

UPDATE pers P 
SET P.gehalt = P.gehalt * 1.05 
WHERE (P.chefID IS NOT NULL 
OR gehalt < 
(SELECT (
    SELECT MAX(gehalt * 1.05) 
    FROM pers …
Run Code Online (Sandbox Code Playgroud)

mysql sql mysql-error-1093

353
推荐指数
9
解决办法
25万
查看次数

SQL DELETE与JOIN另一个表用于WHERE条件

我必须删除guide_categoryguidetable 无关的行(死关系).

这是我想要做的,但它当然不起作用.

DELETE FROM guide_category AS pgc 
 WHERE pgc.id_guide_category IN (SELECT id_guide_category 
                                   FROM guide_category AS gc
                              LEFT JOIN guide AS g ON g.id_guide = gc.id_guide
                                  WHERE g.title IS NULL)
Run Code Online (Sandbox Code Playgroud)

错误:

您不能在FROM子句中为更新指定目标表'guide_category'

mysql sql delete-row mysql-error-1093 sql-delete

70
推荐指数
3
解决办法
19万
查看次数

SQL UPDATE与子查询引用MySQL中的同一个表

我正在尝试使用UPDATE更新表中一堆行中的列值.问题是我需要使用子查询来派生此列的值,它依赖于同一个表.这是查询:

UPDATE user_account student
SET student.student_education_facility_id = (
   SELECT teacher.education_facility_id
   FROM user_account teacher
   WHERE teacher.user_account_id = student.teacher_id AND teacher.user_type = 'ROLE_TEACHER'
)
WHERE student.user_type = 'ROLE_STUDENT';
Run Code Online (Sandbox Code Playgroud)

通常,如果老师和学生在两个不同的表中,mysql不会抱怨.但由于他们都使用相同的表,mysql反而吐出了这个错误:

错误1093(HY000):您无法在FROM子句中为更新指定目标表'student'

有什么办法可以强制mysql进行更新吗?我100%肯定,因为更新行,所以from子句不会受到影响.

如果没有,是否有另一种方法可以编写此更新sql来实现同样的效果?

谢谢!

编辑:我想我得到了它的工作:

UPDATE user_account student
LEFT JOIN user_account teacher ON teacher.user_account_id = student.teacher_id
SET student.student_education_facility_id = teacher.education_facility_id
WHERE student.user_type = 'ROLE_STUDENT';
Run Code Online (Sandbox Code Playgroud)

mysql sql mysql-error-1093

40
推荐指数
3
解决办法
10万
查看次数

插入并设置max()+ 1个问题的值

我正在尝试插入一个新行并使用max()+ 1设置customer_id.原因是该表已经在另一个名为id的列上具有auto_increatment,并且该表将具有多个具有相同customer_id的行.

有了这个:

INSERT INTO customers
  ( customer_id, firstname, surname )
VALUES 
  ((SELECT MAX( customer_id ) FROM customers) +1, 'jim', 'sock')
Run Code Online (Sandbox Code Playgroud)

...我一直收到以下错误:

#1093 - You can't specify target table 'customers' for update in FROM clause
Run Code Online (Sandbox Code Playgroud)

另外,我如何阻止同时添加2个不同的客户而没有相同的customer_id?

mysql sql insert mysql-error-1093

39
推荐指数
6
解决办法
15万
查看次数

删除 - 我无法指定目标表?

为什么这个查询不起作用?

DELETE FROM recent_edits 
WHERE trackid NOT IN 
     (SELECT DISTINCT history.trackid 
     FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
     GROUP BY recent_edits.trackid)
Run Code Online (Sandbox Code Playgroud)

我收到此消息:"您无法在FROM子句中为更新指定目标表"recent_edits"

mysql mysql-error-1093

33
推荐指数
2
解决办法
2万
查看次数

如何锁定对MySQL表的读/写,以便我可以选择然后插入而无需其他程序读/写数据库?

我并行运行了很多webcrawler实例.

每个爬网程序从表中选择一个域,将该URL和开始时间插入到日志表中,然后开始对域进行爬网.

在选择要爬网的域之前,其他并行爬网程序会检查日志表以查看已爬网的域.

我需要阻止其他抓取工具选择刚刚被其他抓取工具选中但尚未拥有日志条目的域.我最好的猜测是如何锁定数据库以防止所有其他读/写,同时一个爬虫选择一个域并在日志表中插入一行(两个查询).

一个人怎么做到这一点?我担心这非常复杂,并且依赖于许多其他事情.请帮助我开始.


这段代码似乎是一个很好的解决方案(但请参阅下面的错误):

INSERT INTO crawlLog (companyId, timeStartCrawling)
VALUES
(
    (
        SELECT companies.id FROM companies
        LEFT OUTER JOIN crawlLog
        ON companies.id = crawlLog.companyId
        WHERE crawlLog.companyId IS NULL
        LIMIT 1
    ),
    now()
)
Run Code Online (Sandbox Code Playgroud)

但我不断收到以下mysql错误:

You can't specify target table 'crawlLog' for update in FROM clause
Run Code Online (Sandbox Code Playgroud)

没有这个问题,有没有办法完成同样的事情?我尝试了几种不同的方式.包括这个:

INSERT INTO crawlLog (companyId, timeStartCrawling)
VALUES
(
    (
        SELECT id
        FROM companies
        WHERE id NOT IN (SELECT companyId FROM crawlLog) LIMIT 1
    ),
    now()
)
Run Code Online (Sandbox Code Playgroud)

mysql locking web-crawler mysql-error-1093

28
推荐指数
3
解决办法
8万
查看次数

MySQL#1093 - 您无法在FROM子句中为更新指定目标表'giveaways'

我试过了:

UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Run Code Online (Sandbox Code Playgroud)

但它给出了:

#1093 - 您无法为update in FROM子句指定目标表'giveaways'

这篇文章看似相关,但我无法将其改编为我的查询.我怎样才能让它发挥作用?

mysql sql select subquery mysql-error-1093

26
推荐指数
3
解决办法
5万
查看次数

从插入或更新的同一表中选择

显然以下是不正确的.

INSERT INTO `aTable` (`A`,`B`) VALUES((SELECT MAX(`A`) FROM `aTable`)*2),'name');
Run Code Online (Sandbox Code Playgroud)

我得到的价值:

SQL查询:

INSERT INTO `aTable` (`A`, `B` )
VALUES 
(
  (
   SELECT MAX(`A`)
   FROM `aTable`
  ) *2
 , 'name'
)
Run Code Online (Sandbox Code Playgroud)

MySQL说:

1093 - 您无法在FROM子句中为更新指定目标表'aTable'

所以,我正在尝试制作一个位图表,每行对应一位,并具有"map"值.

要在表中插入,我不想做两个查询,我想做一个.我该怎么做?

没有人对此发表评论,但由于我正在尝试制作位图,它应该是*2而不是^ 2,我的错误,请注意这就是为什么评论经常说^ 2,这是评论者的版本中的错误读.

mysql sql mysql-error-1093

10
推荐指数
3
解决办法
3万
查看次数

根据最大值删除行

如何构建mySQL查询以根据最大值删除行.

我试过了

WHERE jobPositonId = max(jobPostionId)
Run Code Online (Sandbox Code Playgroud)

但是有错误?

mysql sql max mysql-error-1093 sql-delete

7
推荐指数
2
解决办法
3万
查看次数