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表:
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) 我必须删除guide_category与guidetable 无关的行(死关系).
这是我想要做的,但它当然不起作用.
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'
我正在尝试使用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) 我正在尝试插入一个新行并使用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?
为什么这个查询不起作用?
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"
我并行运行了很多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) 我试过了:
UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Run Code Online (Sandbox Code Playgroud)
但它给出了:
#1093 - 您无法为update in
FROM子句指定目标表'giveaways'
这篇文章看似相关,但我无法将其改编为我的查询.我怎样才能让它发挥作用?
显然以下是不正确的.
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查询以根据最大值删除行.
我试过了
WHERE jobPositonId = max(jobPostionId)
Run Code Online (Sandbox Code Playgroud)
但是有错误?
mysql ×10
mysql-error-1093 ×10
sql ×7
sql-delete ×3
subquery ×2
delete-row ×1
insert ×1
locking ×1
max ×1
select ×1
web-crawler ×1