我正在尝试从公司表中获取 id,但该 id 尚未出现在crawlLog 表中。然后我需要将该companyId 插入crawlLog 表中。
我需要在一次调用中执行此操作,以便并行爬网程序在其他爬网程序选择了某个 url 但尚未将其插入爬网日志后不会提取相同的 url。我不想因为产生其他问题而锁定表。
我从下面的两个查询中收到此错误:
You can't specify target table 'crawlLog' for update in FROM clause
这是我尝试做同样事情的两个查询。
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()
)
我也尝试过这个,但得到同样的错误:
INSERT INTO crawlLog (companyId, timeStartCrawling)
VALUES
(
(
SELECT id
FROM companies
WHERE id NOT IN
(
SELECT companyId
FROM crawlLog
)
LIMIT 1
),
now()
)
为什么要使用子选择? INSERT INTO ... SELECT 存在:
INSERT INTO crawlLog (companyId, timeStartCrawling)
SELECT companies.id, NOW()
FROM companies
LEFT OUTER JOIN crawlLog
ON companies.id = crawlLog.companyId
WHERE crawlLog.companyId IS NULL
LIMIT 1
这样它就不会抱怨在 INSERT 和 SELECT 部分中同时使用表
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)